Java-JVM-垃圾回收器

2021/11/30 20:38:38

本文主要是介绍Java-JVM-垃圾回收器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

垃圾回收器都有那些?

单线程垃圾回收器:Serial、Serial Old

多线程垃圾回收器:ParNew、Parallel、Parallel Old

并发垃圾回收器:CMS,G1

你最了解那一款垃圾回收器

都知道一点吧,比如说单线程的Serial、SerialOld,适合用在一些单核的CPU中,比如说一些嵌入式

然后ParNew的话是一个独立的年轻代的垃圾回收器,是第一款多线程的垃圾回收器,是Serial的多线程的的版本

随后就是 Parallel 是JDK8中的默认的垃圾的回收器,以吞吐量优先的的垃圾回收器

再然后就是CMS,这是在JDK 1.5的时候推出的划时代的并发回收器,第一次实现了垃圾收集线程和用户线程同时的工作。关注点在于如何更好的停顿时间,在一些服务器端会带来更好的体验

随后就是在JDK1.7的u4版本中可用的G1垃圾回收器,以良好的吞吐量为优先,目标是在低延迟的情况下得到更好的吞吐量,担任的全功能的垃圾回收期

你了解CMS的垃圾回收算法吗?

CMS是一个并发的垃圾回收器,所以说,大概有以下这几个过程

  • 初始化标记阶段,标记处GC Roots
  • 并发标记阶段,这个阶段会根据GC Roots进行向下标记,但是并不会造成STW
  • 重新标记阶段,这个阶段可能会造成一些垃圾回收的浮动垃圾,于是就会进行重新的标记
  • 垃圾清除阶段:这个是一个并发的清除的过程,所以说采用的是标记清除算法,如果使用压缩,以防止干扰用户线程

那G1的垃圾回收算法呢

G1垃圾回收是基于Region分区的,它把整个堆在逻辑上拆分成了老年代、年轻代,随后避免全堆的收集,有一个可以遇见的时间模型,根据一个优先的列表在运行收集的时间内。优先回收价值比较大的Region,所以说也就叫垃圾优先,G first。

他的垃圾回收主要分为

  • 年轻代gC
  • 老年代的并发标记
  • 混合回收
  • 还有独占的、单线程的Full GC

年轻代的GC主要有

  • 扫描根
  • 更新Result集合
  • 处理RSet集合
  • 复制对象
  • 处理引用

并发标记的过程有

  • 初始化标记阶段:这个阶段会触发一次年轻代的GC
  • 根区域扫描
  • 并发标记
  • 再次标记
  • 独占清理
  • 并发清理

Full GC
如果上述的垃圾算法都无法满足,那么就会触发Full GC,Full GC 会造成长时间的程序停顿



这篇关于Java-JVM-垃圾回收器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程