首页 > 代码库 > 关于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