最近在看周志朋的深入理解JVM,刚学到垃圾回收算法,结合其他博客的理解,以及书中的说明,自己绘制了流程图,如下
堆Heap
一个JVM只有一个堆内存,堆内存大小可调节。
堆中存放实例化的对象
1.Young年轻代(1/3):对象诞生、成长甚至死亡的区
Eden Space(伊甸园区)8:所有的对象都是在此new出来的(如果新创建的对象占用内存很大,
直接分配到老年代),当Eden区内存不够就会触发MinorGC,对新生代进行一次垃圾回收。
Survivor Space(幸存区):
幸存0区(From Space)1:上一次GC的幸存者,作为这一次的GC的被扫描者
幸存1区(To Space)1:保留了一次MinorGC过程中的幸存者。
动态的,From和To会互相交换
Appel式回收
• 把新生代分为一块较大的Eden空间和两块较小的Survivor空间
• 每次分配内存只使用Eden和其中一块Survivor
• 发生垃圾搜集时,将Eden和Survivor中仍然存活的对象一次性复制到另外一块Survivor空间上
• 然后直接清理掉Eden和已用过的那块Survivor空间。
• 当Survivor空间不足以容纳一次MinorGC之后存活的对象,就需要依赖其他内存区域(老年代)进行分配担保