在sun的HotSpot中垃圾收集机制中,存在吞吐量优先:+UseParallelGC和响应时间优先:+UseConcMarkSweepGC两种方式。
看了一下sun的文档,发现两者好像没有太大区别:
1.吞吐量优先是并行垃圾收集,application进程暂停,考虑在old generation中jdk6也实现了并行收集;
2.响应时间优先是并发垃圾收集,只是进行两次较短的application进程停止,其它过程中仍然并行处理;
这里就产生了以下的疑问:
1.从文档上说,两种策略都针对不同的应用场景,但实际上既然吞吐量优先old区已经可以并发处理,在等待时间上应该有所提高,或者针对old区也可以使用响应时间优先的并发处理模式,为什么两种模式不能统一呢?或者说仍然有什么不同的侧重点?因为无论采用哪种策略,最终目标都是高效的收集垃圾对象;
2.响应时间优先模式中的两次短暂停顿,都是标记live对象,那么这样处理为何能够提高垃圾收集效率?在阶段是暂停进程、在sweep阶段是和application并发吗?如果这个时候application在old区产生了新的live对象、由于没有,会不会被回收呢?不明白如何处理的。另外,如果sweep阶段也是在application停止执行的,和吞吐量优先的并发回收好像没有区别吧?至少暂停一次就够了吧。还请各位高手回复一下。谢谢!