GC的改良

分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描,应该就可以更有效地回收大部分垃圾。按照生成时间进行分代,刚刚生成不久的年轻对象划为新生代,而存活了较长时间的对象划为老生代。根据具体实现方式的不同,可能还会划分更多的代。

首先从根开始一次常规扫描,找到存活的对象,这个步骤采用标记清除或者是复制收集算法都可以,不过大多数分代回收的实现,都采用了复制收集算法。需要注意的是,在扫描的过程中,如果遇到老生代的对象,则不对该对象继续进行递归扫描。这样一来,需要扫描的对象数量就会大幅减少。

然后,将第一次扫描后残留下来的对象划分到老生代。具体来说,如果是用复制收集算法的话,只要将复制目标空间设置为老生代就可以了;而用标记清除算法的话,则大多采用在对象上设置某种标志的方式。


增量回收:为了维持程序的实时性,不等到GC全部完成,而是将GC操作细分成多个部分逐一执行。

由于增量回收的过程是分步渐进的,可以将中断时间控制在一定长度之内。另一方面,由于中断操作需要消耗一定的时间,GC所消耗的总时间就会相应增加。所以有得必有失。


并行回收:在原有的程序运行的同时进行GC操作,可以充分利用多CPU的性能,不过让GC操作完全并行,而一点都不影响原有程序的运行是做不到的。因此在GC操作的某些特定阶段,还是需要暂停原有程序的运行。

在硬件系统的支持下,无需中断原有程序的完全并行回收器也已经呼之欲出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值