JVM的内存分区以及垃圾收集

1.JVM的内存分区

1.1方法区

方法区(永久代)主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的

1.2虚拟机栈

虚拟机栈也就是我们平时说的栈内存,它是为java方法服务的。每个方法在执行的 时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。虚拟机栈是线程私有的,它的生命周期与线程相同。

1.3本地方法栈

本地方法栈和虚拟机栈类似,只不过本地方法栈为 Native 方法服务

1.4堆

java 堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。堆区由可划分为新生代、老年代和元空间三个区域。新生代是所有java对象出生的地方,也是垃圾回收最频繁的区域,新生代的对象大多都朝生夕灭,且Eden区和From、To区三个的比例为8:1:1。老年代是存储被长期使用的对象,元空间存储一些方法中操作的临时对象。

1.5程序计数器

内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数 器完成。该内存区域是唯一一个 java 虚拟机规范规定不会抛 OOM 错误的区域(OOM:Out Of Memory,内存用完)。

2.内存的回收策略

  1. 对象优先在Eden区分配
  2. 大对象由于需要大量连续的内存因此直接进入老年代
  3. 长期存活的对象直接进入老年代

3.垃圾收集方式

GC是garbage collection的缩写,意思是垃圾回收,把堆内存中不再使用的空间释放掉,清理不再使用的对象。

内存泄露:对象不被使用且没有被回收

内存溢出:申请内存时没有足够内存使用

3.1从范围上可划分为:

  • Minor GC:发生在新生代的垃圾收集动作
  • Major GC: 回收老年代垃圾
  • Full GC:收集整个java堆和方法区的垃圾

3.2具体的垃圾收集算法

(1)复制算法:

Minor GC一般就是使用复制算法,具体过程就是:把存活的对象复制到另外一块区域,然后把原来区域所有对象全部清除。

优点:效率高     缺点:需要内存容量大,比较耗内存,适用于占用空间小、刷新次数多的新生区

(2)标记清理:

具体操作就是将未使用的对象进行标记然后回收。但是收集效率比较低且容易产生内存碎片。

(3)标记整理:

标记整理就是在标记清理的基础上将内存碎片进行整理,虽然不会产生碎片,但是需要移动对象导致效率低速度慢。并且标记整理一般会和标记清理混合使用在老年代用于回收垃圾。

总的来说java回收垃圾采用了分区分代回收思想。

4.垃圾的判定

如何判定在内存中哪些对象是垃圾?

4.1引用计数器

简单来说就是看一个对象还有没有人用它。有地方用它计数器加一,用完了计数器减一,如果一个计数器为0说明是个死对象,就可以被回收了。有个缺陷就是无法解决循环引用问题,就是A引用了B,B也引用了A,直接套娃上了,计数器都为1无法进行垃圾回收,所以主流虚拟机一般不用这种算法

4.2可达性算法

从GCroot到一个对象间没有可到达的路径,则认为该对象不可访问,就可以进行垃圾回收,比如obj5和obj6

哪些对象可以作为GC Roots:

  • 栈中引用的对象
  • 类静态属性引用的对象
  • 常量引用的对象
  • Native方法引用的对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分析若依的文件上传处理逻辑

分析若依的文件上传处理逻辑 注:已经从若依框架完成拆分,此处单独分析一下人家精彩的封装,也来理解一下怎么做一个通用的上传接口!如有分析的,理解的不透彻的地方,大家多多包含,欢迎批评指正&am…

【C语言必学知识点五】指针

指针 导言一、指针与指针变量二、指针变量的创建和指针类型三、指针类型的意义3.1 指针 /- 整数3.2 指针解引用 四、野指针4.1 定义4.2 野指针的成因4.3 指针未初始化4.4 指针越界访问4.5 指针指向的空间被释放4.6 如何规避野指针 五、指针运算5.1指针-整数5.2 指针-指针5.2.1 …

B037-Mybatis基础

目录 为什么需要Mybatis?mybatis简介入门案例其余见代码查询流程增删改流程 - 变动数据要加事务去持久化抽取公共类 mapper接口开发规则概述代码 mapper.xml引入本地约束文件别名日志管理作用log4j的使用规范 井大括号与dollar大括号的区别 框架:半成品&…

Linux篇:信号

一、信号的概念: ①进程必须识别能够处理信号,信号没有产生,也要具备处理信号的能力---信号的处理能力属于进程内置功能的一部分 ②进程即便是没有收到信号,也能知道哪些信号该怎么处理。 ③当进程真的受到了一个具体的信号的时候…

Word公式居中+序号右对齐

Word公式居中序号右对齐 # 号制表位法表格法Mathtype法 # 号 制表位法 表格法 Mathtype法 参考1 参考2

力扣每日一题:2132. 用邮票贴满网格图(2023-12-14)

力扣每日一题 题目:2132. 用邮票贴满网格图 日期:2023-12-14 用时:38 m 32 s 思路:使用前缀和+差分,只是往常是一维,现在变二维了,原理差不多 时间:22ms 内存&#xff1…

certum ev ssl证书1180元一年,360浏览器显示公司名

Certum旗下的EV SSL证书是审核最严的数字证书,不仅对网站传输数据进行加密,还可以对网站身份进行验证,除此之外,它独有的绿色地址栏提升了网站的真实性,增强了客户对网站的信任感。今天就随SSL盾小编了解Certum旗下的E…

【Spring Boot】视图渲染技术之Freemarker

一、引言 1、什么是Freemarker FreeMarker是一款模板引擎,基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款…

LAMP平台部署及应用

1、安装PHP软件包 1.1、准备工作 检查软件是否安装,避免冲突 [rootyang ~]# rpm -e php php-cli php-ldap php-common php-mysql --nodeps 错误:未安装软件包 php 错误:未安装软件包 php-cli 错误:未安装软件包 php-ldap 错误…

使用 Python 使用贝叶斯神经网络从理论到实践

一、说明 在本文中,我们了解了如何构建一个机器学习模型,该模型结合了神经网络的强大功能,并且仍然保持概率方法进行预测。为了做到这一点,我们可以构建所谓的贝叶斯神经网络。 这个想法不是优化神经网络的损失&#xff0…

2. PyTorch——Tensor和Numpy

2.1Tensor和Numpy Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy…

获取和移除cookie的方法

下载npm的cookie插件, 在utils.js文件中引入插件: 封装原始的Cookies.get()方法: 在xxxx.vue文件中引入方法: 使用getCookie方法获取cookie: 封装 移除cookie: export const removeCookie name>{ const options { path: /, domain: xxx.com }; Cookies.remove(name, opti…

18 5G - NR物理层解决方案支持6G非地面网络中的高移动性

文章目录 非地面网络场景链路仿真参数实验仿真结果 非地面网络场景 链路仿真参数 实验仿真结果 Figure 5 && Figure 6:不同信噪比下的BER和吞吐量 变量 SISO 2x2MIMO 2x4MIMO 2x8MIMOReyleigh衰落、Rician衰落、多径TDL-A(NLOS) 、TDL-E(LOS)(a)QPSK (b)16…

玩期货,千万要注意不同软件的设置啊

参加某公司的期货交易模拟选拔,用的是博易大师,结果这个软件的止损线巨坑,当天下午设置的止损线,在收盘之后软件关闭的情况下就自动作废了,到了晚上夜盘如果价格超相反方向走了,那可能导致巨亏。 幸亏是模拟…

nginx的location与rewrite

目录 一.location 二.rewrite rewrite跳转实现: 语法格式:rewrite [flag]; flag标记说明: 三.基于域名跳转 四.基于ip跳转 五.基于旧域名跳转到新域名后面加目录 六.基于参数匹配的跳转 可以同过全局变量来匹配: 基于目…

最高级别认可!喂车科技荣获国际CMMI5级认证

近日,喂车科技顺利通过全球软件领域最高级别认证CMMI 5级(简称CMMI5)认证! 此次荣获CMMI5级认证,意味着喂车科技在研发管理体系、项目实施交付服务以及项目管理水平等方面均已达到国际领先水平,能够为客户…

如何远程访问Axure RP制作的本地web站点实现协同办公

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

在windows系统搭建LVGL模拟器(codeblock工程)

1.codeblock准备 下载codeblock(mingw),安装。可参考网上教程。 2.pc_simulator_win_codeblocks 工程获取 仓库地址:lvgl/lv_port_win_codeblocks: Windows PC simulator project for LVGL embedded GUI Library (github.com) 拉取代码到本地硬盘&…

机器学习算法应用场景与评价指标

机器学习算法(一)——分类 机器学习算法(二)——回归 机器学习算法(三)——异常检测 一、应用场景 机器学习的算法选择大部分依赖于具体的问题类型和数据特征。下面是一些典型的场景以及对应的常用算法&am…

面对知识经济的发展,企业该如何做好知识管理?

面对知识经济的发展,企业犹如逆水行舟,不进则退,而知识管理已经成为了企业赖以生存和发展的关键。大家可能对知识经济这个词比较陌生,简单来说,知识经济就是指在经济活动中,知识的产生、获取、传播和应用成…