之前说过GC算法,现在来回顾一下。
标记清除,复制,标记压缩(整理)这三个垃圾回收算法。
优点:
缺点:
GCRoot找到有用的对象,把这部分对象拷贝到另一块内存里去。
优点:
缺点:
优点:
缺点:
栈上分配的是:
常见的有三种组合:(年轻代+老年代)
G1 只是在逻辑上分年轻代和老年代。
前三种不仅在逻辑上分了年轻代和老年代,在物理上也把内存划分为年轻代和老年代
第一种组合:Serial + Serial Old (单线程回收在年轻代+单线程回收在老年代)
第二种组合 (默认的)
PS+PO :Paraller Scavenge + Paralle Old (多线程回收年轻代+多线程回收老年代)
Paraller Scavenge:(发生在年轻代的单线程垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是多线程的。stw存在,而年轻代一般使用的是复制算法
Paralle Old:(发生在老年代的垃圾回收器)当回收的时候,工作线程(用户线程)就停了,回收是多线程的。stw存在,老年代采用的是标记整理算法
第三种组合
ParNew+CMS(多线程回收年轻代+多线程回收老年代)
ParNew :和上面一样,采用复制算法多线程回收年轻代。存在stw。
CMS:用于老年代,用户线程---初始标记---用户线程和并发标记同时进行---重新标记---用户线程和并发清理,可以看出 concurrent的意思是在做并发标记和并发清理的时候此时用户线程是不停止的。 所以在初始标记和重新标记阶段还是有stw。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!