常见的垃圾回收器 *
 
1 serial 单线程
serial old 常见组合
2 parallel Scavenge 多线程
parallel old 常见组合
3 parNew CMS 常见组合

前面几种 不仅在逻辑上分年轻代和老年代 在物理上也是分为年轻代和老年代 内存两大块 年轻代 老年代
G1 只是在逻辑上分年轻代和老年代 登陆以后? 一块一块
Serial : 单线程 效率高 当serial 工作的时候所有工作线程都找一个安全点停止 然后清理垃圾 在清理垃圾到清理完毕之间的时间为停顿时间为(STW) serial 只能适用于单线程 多线程垃圾太多
serial old 单线程 在老年代 用的是mark-sweep 或者是mark -compact 算法
ParallelScavenge + Parallel Old 默认生产环境 简称PSPO 多线程清理垃圾 和上面单线程类似
只要不是明确指定CMS 或者G1 的话默认垃圾回收PSPO
ParNew+CMS 有没有不产生垃圾回收器的STW -> 没有
ParNew 是在ParallelScavenge上增强 以便于和CMS 结合使用 CMS 在某个阶段的时候ParNew 会同时运行
CMS (因为之前的垃圾回收器回收垃圾的时候 其他线程无法运行) 老年代触发CMS
concurrent mark sweep 并行回收 毛病较多 目前没有JDK版本默认是CMS
CMS 垃圾回收线程和工作线程可以同时进行 并发垃圾回收是因为无法忍受STW


CMS 四个清理垃圾阶段 初始标记 单线程 重新标记多线程 这两个时间消耗较少 并发标记时间消耗占比总消耗80%
1初始标记的阶段initial Mark :在线程栈变量 静态变量 常量池 JNI指针 找到他们根对象 把他们标记出来
2并发标记阶段concurrent Mark 垃圾回收线程和并发线程同时运行 将并发垃圾标记
3重新标记 remark 由于在并发垃圾回收的过程中 并发线程会出现新的垃圾
4 清理concurrent Sweep 之间还会产生浮动垃圾 只能等下个阶段在重新清理
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号