第8课: JVM的young Generation大小对gc性能的致命影响力内幕解密

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/someby/article/details/83579199

内容:

    1.JVM Young Generation工作机制详解
    2.Young Generation对GC的性能的影响

一、VM Young Generation工作机制详解

    1.年轻代和年老代实现算法不同,年轻代GC是有空间的,释放已经占用的空间,年老代GC是没有空间了,是迫不得已,大部分的JVM对象生命周期都不是很长。
    2.整个Heap分为年轻代和年老代,之所以这么分,是GC性能考虑的。提升效率。年轻代进行GC的时候一般都会有新的空间的。年老代进行GC的时候,一般没有更多的空间了。年轻代的GC算法一般采用标记拷贝的算法。Eden中的对象会被移动到S区,这就是一个拷贝的过程。
    3.GC之前,对象是存在Eden和From区域中,GC后,会被拷贝到To区域。From中的对象,算法会考虑其年龄,到达一定阀值会被复制到Old Generation。如果没有到达次数,会被从From复制到To。复制完成后,从新生代的角度讲,To中保存的是有效的对象,Eden和From中剩下的都是无效的对象,这个时候就可以把所有的对象清空。
    4.Eden的内容复制到To,但是To这个时候已经满了,这个时候Eden的对象会被直接复制到Old Generation,From也会如此。对象直接进入Old Generation这种可能是存在的。当然这是不希望看到这种情况。
    5.拷贝完成后,From和To的名字会对调。对调之后,To和Eden是空的。
    6.Old Generation空间不足产生Full GC的三种情况:
        a)From中对象生命值达到阀值,进入Old Generation导致空间不足。
        b)To空间不足,大量的对象直接进入Old Generation导致空间不足。
        c)直接分配的对象是大对象,直接进入Old Generation导致空间不足。

猜你喜欢

转载自blog.csdn.net/someby/article/details/83579199
今日推荐