首页 > 代码库 > 关于hotspot的gc

关于hotspot的gc

关键词

分代gc

java的堆内存主要分为young generation与old generation

其中young generation又分为一个eden space与两个survivor space(From与TO)。默认情况下,eden space占young generation的80%,两个survivor space各占10%。

新对象一般在eden space中分配,如果eden space满了,就进行一次young gc。eden space + From 中的所有存活对象会被复制到TO里去(这是因为大部分的新分配对象都会迅速死亡,每个survivor space虽然只占young generation的10%,但是一般情况下足够存放younggc中的存活元素)。每次young gc之后,From与TO交换。

每个Object的对象头里都有字段用于记录这个对象经历了多少次young gc。如果一个对象熬过了一定次数(可以通过-XX:MaxTenuringThreshold配置,默认为15次)的Young gc而不死,那么可以晋升到old generation。

如果新对象的体积过大(可以通过-XX:PretenureSizeThreshold配置,但是该设置只对Serial和ParNew收集器生效),那么它会被直接分配到old generation

 

remember set   --  card table

write barrier

stw

young gc

major gc

full gc

promotion guarantee check

 

 

参考资料

http://hllvm.group.iteye.com/group/topic/21468#post-272070

http://blog-archive.griddynamics.com/2011/06/understanding-gc-pauses-in-jvm-hotspots.html

 

关于hotspot的gc