01-011 jvm垃圾回收之分代回收

区域划分

堆内存分为两大块新生代、老年代
新生代用完就回收,长时间存活放在老年代中。
新生代分区:
1.伊甸园
2.from幸存区
3.to幸存区

新生代回收过程

创建新对象时放入伊甸园,伊甸园放不下会产生第一次垃圾回收,Minor GC
对伊甸园中存活的对象标记,
将存活的对象复制到To幸存区,对象寿命+1,
from和to交换位置,伊甸园可继续放入新对象。
直到伊甸园中又满啦,此时产生第二次Minor GC
对伊甸园和From幸存区中的对象进行标记,
存活的对象复制到To幸存区,寿命+1,
from幸存区和to幸存区换位置。
幸存区的寿命超过阈值(最大15),价值较高,晋升到老年代去。
新对象哪哪都放不下了,触发老年代回收,Full GC。

总结:
1.对象首先分配到伊甸园中;
2.新生代空间不足时,触发minor GC,将伊甸园和from中存活的对象复制到to中,存活的对象年龄+1,并且交换from和to;
3.minor GC会引发stop the world,其他用户执行的线程都暂停掉,垃圾回收结束用户线程恢复运行,时间非常短;
4.对象寿命超过阈值(最大15)可晋升到老年代,不同垃圾回收期阈值不同,内存紧张可能提前晋升;
5.当老年代空间不足,先minor GC,之后,仍然空间不足,触发full GC,也会引起stop the world,时间会更长。

学习整理于解密JVM.

发布了53 篇原创文章 · 获赞 0 · 访问量 408

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103528691