4-JVM的GC算法(2)

新生代可用的GC策略

 

首先介绍一种Stop-The-World(STW):Java中一种全局暂停的现象,全局停顿,所有Java代码停止,native代码可以执行,但是不能和JVM交互。这个过程多半由于GC引起,包括:(1)Dump线程;(2)死锁检查;(3)堆Dump。

 

串行GC(Serial Copying)

复制(Copying)清理算法

A、 扫描年轻代中所有存活的对象;

B、 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或者“S1”区;

C、 在上一次Minor GC的基础上进行“S0”和“S1”的角色互换

D、 经历过多次Minor GC依然存活的对象晋升到老年代

并行回收GC(Parallel Scavenge)

  复制(Copying)清理算法

操作步骤:在串行算法的扫描和复制时均采用多线程处理方式,并行回收GC为空间较大的年轻代提供了许多优化。

优势:在多CPU的机器上其耗时会比串行GC短,适合多CPU且对暂停时间要求较短的应用。

劣势:在年轻代使用并行GC处理的时候回产生一个STW的暂停,在进行对象回收的时候其他的线程会被暂时性挂起,来保证垃圾回收的彻底

图一:串行回收和并行回收

并行GC(ParNew)

复制(Copying)清理算法

并行GC(ParNew)必须结合老年代“CMSGC”一起使用,因为在年轻代如果发生了“Minor GC”时,老年代也需要使用“CMS GC”同时处理。

CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收的垃圾回收器,对于要求服务器响应速度的应用上,这种垃圾回收器非常合适。

 

老年代可用GC策略

串行GC(Serial MSC)

标记-清除-压缩

A、 扫描老年代中还存活的对象,并且对这些对象进行标记;

B、 遍历整个老年代的内存空间,回收所有未标记的对象内存;

C、 将所有存活对象集中在一端,而后将所有回收对象的内存空间变为一块连续的内存空间

优缺点:串行执行的过程为单线程,需要暂停应用并耗时较长。

并行GC(Parallel MSC)

算法标记-压缩

A、 将老年代的内存空间按照线程个数划分为若干子区域;

B、 多个线程并行对各自子区域内的存活对象进行标记;

C、 多个线程并行清理所有未标记的对象;

D、 多个线程并行将多个存活对象整理在一起,并将所有被回收的对象空间整合为一体;

优缺点:多个线程同时进行垃圾回收可以缩短应用的暂停时间,但是由于老年代的空间一般较大,所有扫描和标记存活对象上需要花费的时间依然较长。

并发GC(CMS)

算法标记-清除

A、 初始标记(STWInitial Mark):虚拟机暂停正在执行的任务(STW),有根对象扫描出所有关联对象并做出标记。此过程只会导致短暂的JVM暂停。

B、 并发标记(ConcurrentMarking):恢复所有暂停的线程对象并且对之前标记过的对象进行扫描,取得所有和标记对象相关联的对象。

C、 并发预处理(ConcurrentPrecleaning):查找所有并发标记阶段新进入老年代的对象(一些对象可能从新生代晋升到老年代,或者一些对象被分配到了老年代),通过重新扫描减少下一阶段的工作;

D、 重新标记(STWRemark):此阶段会暂停虚拟机,对在“并发标记”阶段被改变的引用或者新创建的对象进行标记。

E、 并发清理(ConcurrentSweeping):恢复所有暂停的应用线程,对所有未标记的垃圾对象进行清理,并且尽量将已回收对象的空间重新拼凑成一个整体,在此阶段收集器线程和应用线程并发执行。

F、  并发重置(ConcurrentReset):重置CMS收集器的数据结构,等待下一次的垃圾回收。

优缺点:只有在第一次和重新标记阶段才会停止整个应用,这样对应用程序的影响非常小。缺点是并发标记和回收线程会与应用线程抢占CPU资源,并且没有进行压缩,容易产生内存碎片。


图二:串行GC和CMS

GC选择策略

图三:GC的选择策略

 

以上策略的缺点:都需要扫描全部子内存。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值