关于hotspot的gc

Posted stevenczp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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的主要内容,如果未能解决你的问题,请参考以下文章

关于JVM和Hotspot,你也许有这么几个容易晕的问题

关于Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: 11043的解决办

ROS Hotspot服务器的搭建与设定!(上网认证)

Hotspot优化指南(上)

[Inside HotSpot] C1编译器优化:全局值编号(GVN)

编绎调试HotSpot JVM及在Eclipse里调试HotSpot一些步骤