为什么垃圾收集开始时“来自”幸存者空间不为空?

时间:2017-12-14 12:49:50

标签: java garbage-collection

我在Oracle网站上找到了“Java垃圾收集基础”教程:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

包括以下内容:

  

分代垃圾收集过程   现在您已经了解了为什么堆被分成不同的代,现在是时候看看这些空间是如何相互作用的。后面的图片将介绍JVM中的对象分配和老化过程。

     

首先,将任何新对象分配给伊甸园空间。 两个幸存者空间都是空的。

enter image description here

但是在这张图片中,“来自”幸存者空间不是空的,它有两个物体,一个是1岁,另一个是3岁。这是一个错误吗?

1 个答案:

答案 0 :(得分:2)

不,这不是错误。

图像只是显示第一次次要垃圾回收之前的情况。链接中的子弹2和3说明:

  
      
  1. 当伊甸园空间填满时,会触发轻微的垃圾收集。
  2.   
  3. 引用的对象被移动到第一个幸存者空间。清除伊甸园空间时,将删除未引用的对象。
  4.   

因此,伊甸园空间中的引用对象在次要垃圾收集期间移动到幸存者空间,并且每个后续次要GC递增幸存对象的年龄。因此,根据图像,在分配新对象之前必须至少有3个次要GC。