JVM的垃圾收集在年轻一代(JVM garbage collection in young gene

2019-08-03 10:16发布

请随时纠正我,如果我错了。 在JVM堆,有两代人,有老有少。 在做完整的GC,在老一代,有喜欢紧凑的空间和固定孔,这将使JVM挂起重操作。 我觉得在年轻一代中,重量轻GC应用,并有所谓的伊甸园从我的搜索结果中涉及年轻一代的另一个领域。 然而,在搜索了很多的文件,我仍对GC两个混淆的年轻一代,

  1. 在年轻的一代,似乎GC没有在工作方式这老一代GC工程(即老一代GC紧凑和固定孔)? 如果是这样,如何在年轻一代的作品做了GC?
  2. 什么是伊甸园的空间,这个空间是如何用在年轻一代? 不胜感激,如果一个新手任何文档被推荐。

Answer 1:

这是你必须记住和理解单一,最重要的图:

Java的内存布局http://www.oracle.com/ocom/groups/public/@otn/documents/digitalasset/190244.gif

它来自Java SE 6的热点[TM]虚拟机垃圾收集调优 ,一站式的地方,了解GC内部的一切。 但是,以解决您的眼前问题:

使用分配新对象new运营商( 几乎 )总是发生在伊甸园的空间。 但是伊甸园实际上是一个堆栈。 当你创建新的对象需要N个字节,由N个单指针字节的进步是堆栈上的,就是这样。 分配是快,没有寻找免费的现货,压实,等等。

当然,这堆栈不是无限的,在某些时候,我们将到达其终点,引发轻微的GC。 也最有可能的多个对象已经垃圾。 那么JVM做轻微的GC如下:

  • 物体的横动图表从GC根部开始

  • 复制所有对象从GC根生存空间的一个可达的(无缺口,我们知道所有的人,这是一个单一的过程)

  • 消灭伊甸空间(基本上只移动这个堆栈指针返回到0

在随后的未成年人集合有额外的步骤:

  • 生存空间的一个检查为好。 来自伊甸园和生存空间的一个活的对象复制到第二个生存空间。 这意味着总有只有一个自由生存空间。

因此,如何在年老代结束对象? 首先年轻的对象复制到幸存者空间之一。 然后,他们被一次又一次复制到另一个。 一旦给定的对象跳来回次数太多(可配置,8默认情况下),它被晋升为终身空间。

主要GC当终身空间已满运行。



文章来源: JVM garbage collection in young generation