利用两个survivor达到新生代无碎片的目的:
Eden | Survivor1 | Survivor2 |
S1、程序初始化,新生代的三个空间均为空
S2、Eden被分配的新对象占满,触发第一次Minor GC,Eden中存活对象被复制到Survivor1中,剩余对象被回收(回收后,Eden为空,Survivor1无碎片地存放所有存活对象,Survivor2为空)
S3、Eden再次被新对象占满,触发第二次Minor GC,此时Eden和Survivor1中的存活对象被复制到Survivor2中,剩余对象被回收(回收后,Eden为空,Survivor1为空,Survivor2无碎片地存放所有存活对象)
S4、如此交替,在执行一定次数的Minor GC后,会通过Full GC将survivor中的存活对象移入老年代。