JVM的内存模型和垃圾回收机制

发布时间:2021-09-17 15:56:16 作者:chen
来源:亿速云 阅读:97

本篇内容介绍了“JVM的内存模型和垃圾回收机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

JVM的内存模型和垃圾回收机制

jvm的内存模型和heap的分代模型如上图所示

名称是否线程共享存放内容
虚拟机栈局部变量表、方法出口等
本地方法栈native方法
程序计数器当前线程支持的字节码命令
方法区jvm加载的类信息、常量、静态变量等
创建的java对象

分代原因:提升GC性能和方便内存分配

1. 内存分配

2. 内存回收

        几乎所有的java对象都是在eden区出生的,当eden区没有足够的空间时虚拟机会发起一次minorGC,此后存活下的对象会被放到seurvier区,如果surviver区的空间不够,则根据内存担保原则分配到老年代。

  1. 引用计数法:即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为0,则说明对象不太可能再被用到,那么这个对象就是可回收对象(可是会有循环引用的问题)。

  2. 可达性分析法:解决引用计数法的循环引用问题,如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。

3. 垃圾回收算法

  1. java堆中不存在该类实例

  2. 该类的classLoader都被回收

  3. 该类的java.long.Class都被回收,无法通过反射访问改方法,满足以上三条件,方法区内的类就被回收了。

4. 垃圾收集器

JVM的内存模型和垃圾回收机制

垃圾收集器对比
      名称    使用范围  原理                                         优缺点                                 
Serial新生代单线程,复制算法简单高效,java虚拟机client模式下默认新生代垃圾收集器
ParNew新生代Serial+多线程ParNew收集器默认开启和CPU数目相同的线程数,java虚拟机运行在Server模式下新生代的默认垃圾收集器,ParNew垃圾收集器在垃圾收集过程中同样也要暂停所有其他的工作线程
Parallel Scavenge新生代多线程复制算法重点关注的是程序达到一个可控制的吞吐量
Serial Old(MSC) 老年代单线程标记整理算法Client默认的java虚拟机默认的年老代垃圾收集器,也会暂停所有线程
Parallel Old老年代多线程标记整理算法Parallel Old正是为了在年老代同样提供吞吐量优先的垃圾收集器,如果系统对吞吐量要求比较高,可以优先考虑新生代Parallel Scavenge和年老代Parallel Old收集器的搭配策略
CMS老年代多线程标记清除算法

主要目标是获取最短垃圾回收停顿时间,

最短的垃圾收集停顿时间可以为交互比较高的程序提高用户体验,总体上来看CMS收集器的内存回收和用户线程是一起并发地执行

G1新生代/老年代
  1. 基于标记-整理算法,不产生内存碎片。

  2. 可以非常精确控制停顿时间,在不牺牲吞吐量前提下,实现低停顿垃圾回收

G1收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据所允许的收集时间,优先回收垃圾最多的区域。区域划分和优先级区域回收机制,确保G1收集器可以在有限时间获得最高的垃圾收集效。

5. 结语

        jvm的内存回收依赖垃圾收集器,而垃圾收集器是垃圾回收算法的具体实现,可以通过启动参数指定不同的新生代,老年代的垃圾回收器。所有垃圾回收器的优化方向都是尽可能的降低“stop the world”的耗时,也就是垃圾回收线程执行耗时,尽可能的提高cpu的吞吐量。不同的实现方案造成了不同的垃圾回收器。如serial,parallel,cms,没有一种能够适应所有的垃圾回收需求,都是根据义务需求组合使用,目前最牛掰的是G1回收器,但是生产环境几乎没有使用。

“JVM的内存模型和垃圾回收机制”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. jvm垃圾回收机制
  2. jvm内存模型及分配参数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:FastDFS的架构及特点介绍

下一篇:Redis高效实现点赞、取消点赞的步骤

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》