-
内存分代模型
分代模型并不是一种垃圾回收算法,而是一种内存管理模型。将java中的内存分为不同区域,在GC时不同区域采用不同的算法,提高回收效率。内存分代模型将java堆内存中的区域分成两部分新生代(new)和老年代(old),两块区域的默认比例为1:2。
新生代又分为一个伊甸园区(eden)和两个存活区(survivor),s0和s1,默认比例为8:1:1
新生代的GC被称为YGC/MinorGC,老年代的GC被称为Full GC/MajorGC。
2. 分代垃圾回收算法
2.1 新对象出生在eden中,对象过大在eden装不下则直接进入老年代
2.2 第一次YGC:新生代对象大多数会被回收(80%-90%),剩余活着的对象会被复制到s0区,清空eden
2.3 第二次YGC:把活着的对象(eden+s0区)到复制到s1区,清空eden和s0
2.4 再次YGC:把活着的对象(eden+s1区)到复制到s0区,清空eden和s1
2.5 每经过一次GC,没有被回收的对象年龄+1,当存活对象到达一定年龄后,新生代对象进入老年代(一般是15,CMS回收器默认是6,其他垃圾回收器是15)
2.6 YGC复制时,如果对象过大,s区装不下也会直接将对象拷贝到老年代。
网友评论