请随时纠正我,如果我错了。 在JVM堆,有两代人,有老有少。 在做完整的GC,在老一代,有喜欢紧凑的空间和固定孔,这将使JVM挂起重操作。 我觉得在年轻一代中,重量轻GC应用,并有所谓的伊甸园从我的搜索结果中涉及年轻一代的另一个领域。 然而,在搜索了很多的文件,我仍对GC两个混淆的年轻一代,
- 在年轻的一代,似乎GC没有在工作方式这老一代GC工程(即老一代GC紧凑和固定孔)? 如果是这样,如何在年轻一代的作品做了GC?
- 什么是伊甸园的空间,这个空间是如何用在年轻一代? 不胜感激,如果一个新手任何文档被推荐。
这是你必须记住和理解单一,最重要的图:
Java的内存布局http://www.oracle.com/ocom/groups/public/@otn/documents/digitalasset/190244.gif
它来自Java SE 6的热点[TM]虚拟机垃圾收集调优 ,一站式的地方,了解GC内部的一切。 但是,以解决您的眼前问题:
使用分配新对象new
运营商( 几乎 )总是发生在伊甸园的空间。 但是伊甸园实际上是一个堆栈。 当你创建新的对象需要N个字节,由N个单指针字节的进步是堆栈上的,就是这样。 分配是快,没有寻找免费的现货,压实,等等。
当然,这堆栈不是无限的,在某些时候,我们将到达其终点,引发轻微的GC。 也最有可能的多个对象已经垃圾。 那么JVM做轻微的GC如下:
在随后的未成年人集合有额外的步骤:
- 生存空间的一个检查为好。 来自伊甸园和生存空间的一个活的对象复制到第二个生存空间。 这意味着总有只有一个自由生存空间。
因此,如何在年老代结束对象? 首先年轻的对象复制到幸存者空间之一。 然后,他们被一次又一次复制到另一个。 一旦给定的对象跳来回次数太多(可配置,8默认情况下),它被晋升为终身空间。
主要GC当终身空间已满运行。