分代垃圾回收过程

  • 堆内存初始状态,开辟出新生代和老年代,新生代分为伊甸园区和幸存者区,内存比例为8:1,幸存者区一分为二,划分成幸存者FROM区和幸存者TO区

分代垃圾回收过程_第1张图片

  • 对象首先分配在伊甸园区

 

分代垃圾回收过程_第2张图片

  • 继续存放新对象

分代垃圾回收过程_第3张图片

  •  当发现新生代空间不足时,触发Minor GC,经过标记清除,伊甸园区的垃圾被回收,存活下来的存入幸存者TO区,年龄+1

 

分代垃圾回收过程_第4张图片

  • 交换FROM和TO的指针

分代垃圾回收过程_第5张图片

  • 继续产生新对象,存入伊甸园区

分代垃圾回收过程_第6张图片

  • 伊甸园内存不够,进行第二次Minor GC,清除伊甸园和FROM区的垃圾,并且将伊甸园区和FROM区不是垃圾的对象移动到幸存者TO区,年龄+1(此时年龄为1的是此次伊甸园区保留的对象,2位幸存者FROM区保留的对象,其他伊甸园和FROM区的对象都被回收掉了)

分代垃圾回收过程_第7张图片

  • 交换FROM区和TO区的指针

分代垃圾回收过程_第8张图片

  • 当Minor GC 进行多次以后,有一些一直存活的对象,年龄达到一定的阈值(最大15),就把这个对象晋升至老年代

分代垃圾回收过程_第9张图片

  •  当经过一段时间,老年代内存不足时,会进行一次full gc

分代垃圾回收过程_第10张图片

  • 进行一次Full GC ,回收所有对象

分代垃圾回收过程_第11张图片

你可能感兴趣的:(JVM)