JVM垃圾回收-分代回收(十)

分代回收定义:

前面所说的垃圾回收算法,Java不会单独使用某一种算法,而是混合使用,Java 具体的实现是通过分代回收实现的。先看一张图
JVM垃圾回收-分代回收(十)
从上图可以看到,它分为两个部分:新生代、老年代,新生代又分为了三个区 Eden(伊甸园)+ 幸存区(from)+ 幸存区(to)。
具体执行逻辑如下:
1、当线程执行时,会产生新的对象,并放入Eden区,当新生代内存不足时,触发minor GC,Eden和from存活的对象copy到to中,存活的年龄加1并且交换from to
2、minor GC 会触发 stop the world ,暂停其它用户线程,等待回收完成才会发执行
3、当对象的年龄达进入老年代设置的阈值时,对象就会进入老年代(最大寿命是15)
4、当老年代空间不足时。会先触发minor GC,如果仍不足,会触发Full GC,由于老年代对象比较多,也不容易被回收,所以线程等待的时间可能更长些
5、如果 触发Full GC回收时仍然不足,则会抛出内存溢出异常