老一辈为什么不好?

时间:2015-07-16 22:27:35

标签: java garbage-collection

在将幸存者空间重新定位到旧生成空间之前,可以在幸存者空间之间复制7次对象,我理解这是为了使对象在被放入旧生成空间之前有机会被垃圾收集。我正在听的讲座指出,这是为了避免从年轻代空间到老一代空间的对象推广。

我的问题是为什么升级老一辈不好?讲座没有解释这一点。

2 个答案:

答案 0 :(得分:3)

  

老一辈为什么不好?

     

我正在听的讲座指出,这是为了避免从年轻代空间到老一代空间的对象推广。

对于老一代的推广并不是一般的 。当生命短暂的物体偶然得到提升时,它才会变坏。

想要老一代的长寿命对象,这样它们就不会干扰次要集合。

分配率与对象生命周期大致相反(产生weak generational hypothesis)。这意味着短期对象以高速率生成。 而这反过来意味着:如果短命的物体被提升为旧的物种,那么旧的物种就会被高速填满。

小型GC通常比主要GC更便宜,特别是在暂停时间方面,这就是为什么你不想经常运行后者。

使用CMS和G1,您必须进一步区分。他们尝试以部分并发的方式收集旧一代 - 并且在G1的情况下以小块为单位 - 但如果他们遇到某些失败案例或无法保留,他们会回到完全停止的世界GC提升率

基本上过快地推销过多的短期物体违反了构建地方选区的弱代假设。

答案 1 :(得分:2)

因为一旦对象在旧空间中,唯一可以收集的方法是运行完整的垃圾收集;即垃圾收集整个堆。

你想避免这种情况。