0
点赞
收藏
分享

微信扫一扫

JVM垃圾收集器总结

zhyuzh3d 2022-03-12 阅读 45

对象存活or死亡判定算法

  • 引用计数法:在对象中添加一个引用计数器,每当有一个地方引用它时,计数值就加一,当引用失效,计数值就减一。任何时刻计数器为零的对象就是不会再被使用的对象,此时判定对象为死亡
  • 可达性分析法:设置一系列GC Roots根对象作为其实节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为”引用链“,如果某个对象对GC Roots间没有任何引用链相连,则称此对象是不可达,即可判定对象死亡

垃圾回收算法

  • 标记-清除:先扫描一遍堆中的对象,标记出可以清除的对象,再统一清理(适用于老年代)
  • 标记-复制:先扫描一遍堆中的对象,标记处可以清除的对象,将存活的对象复制到新的内存空间中,再统一清理死亡对象(使用于新生代,因为新生代中的存活对象较少,复制对象所需的成本比较低)注:堆内存区一般被分为新生代区和老年代区,而新生代区又被一块较大的Eden空间和两块较小的Survivior空间,这样分配是为了方便实现并优化标记-复制算法。
  • 标记-整理:先扫描一遍堆中的对象,标记出可以清除的对象,让存活的对象都向内存空间一端移动,然后清除掉边界以外的内存。标记-整理算法是标记-清除算法的进阶,目的是避免大量内存碎片的产生(使用于老年代)

经典垃圾收集器概要

Serial收集器:新生代垃圾收集器;工作时,必须暂停其他所有工作进程,只用一条线程进行工作;采用标记-复制算法;适用于运行在客户端模式下的虚拟机

特点:简单高效

Serial Old收集器:Serial收集器的老年代版本;工作时,必须暂停其他所有工作进程,只用一条线程进行工作;采用标记-整理算法

ParNew收集器:Serial收集器的多线程并行版本;新生代垃圾收集器;工作时,必须暂停其他所有工作进程;采用标记-复制算法

适用于运行在服务端模式下的虚拟机,几乎快被淘汰

Parallel Scavenge收集器:新生代垃圾收集器;工作时,必须暂停其他所有工作进程,多线程并发收集;采用标记-复制算法

特点:关注吞吐量,也被称为“吞吐量优先收集器”,用户可以通过参数设置内存回收花费的时间

吞吐量 = 运行用户代码时间/(运行用户代码时间+运行垃圾收集时间)

Parallel Old收集器:Parallel Scavenge收集器的老年代版本;多线程并发收集,工作时必须暂停其他所有工作进程;采用标记-整理算法

CMS收集器


 

举报

相关推荐

0 条评论