java堆内存被划分为新生代和老年代两部分 , 新生代主要使用复制和标记-清除垃圾回收算法;老年代主要使用标记-整理垃圾回收算法 , 因此java虚拟机中针对新生代和老年代分别提供了多种不同的垃圾收集器 。 JDK1.6中Sun HotSpot虚拟机的垃圾收集器
文章插图
方式/
1Serial垃圾收集器是最根基的收集器 , 利用复制算法 , 单线程 。
文章插图
2ParNew垃圾收集器其实是Serial收集器的多线程版本 , 也利用了复制算法 , 除了利用多线程进行垃圾收集以外 , 其他的行为和Serial收集器一样 , 进行垃圾收受接管时也要停失落所有其它工作线程
文章插图
3Parallel Scavenge收集器也是一个新生代垃圾收集器 , 同样利用复制算法 , 也是一个多线程的垃圾收集器 。
文章插图
4Serial Old 是Serial收集器老年月版本 , 它同样是个单线程的收集器 , 利用标识表记标帜-清算算法 , 这个收集器也本家儿如果运行在Client默认的java虚拟机默认的老年月垃圾收集器 。
在Server模式下 , 本家儿要有两个用途:
1.在JDK1.5之前版本中与新生代的Parallel Scavenge收集器搭配利用 。
2.作为老年月中利用CMS收集器的后备垃圾收集方案 。
新生代Paraller Scavenge 收集器与ParNew 收集器工作道理近似 , 都是多线程的收集器 , 都利用的是复制算法 , 在垃圾收集过程中都需要暂停所有其他工作线程 。
文章插图
文章插图
5Parallel Old 收集器是Parallel Scavenge 的老年月版本 , 利用多线程的标识表记标帜-清算算法 , 在JDK1.6才起头供给 。
1.6之前 , 新生代利用Parallel Scavenge 收集器只能搭配老年月的Serial Old收集器 , 只能包管新生代的吞吐量优先 , 无法包管整体的吞吐量 , Parallel Old 恰是为了在老年月同样供给吞吐量优先的垃圾收集器 , 若是系统对吞吐量要求较高 , 可以优先考虑新生代Parallel Scavenge 和老年月Parallel Old收集器搭配的策略
文章插图
6CMS收集器是一种老年月垃圾收集器 , 其最本家儿要方针是获取最短垃圾收受接管刹时 , 和其他老年月收集器利用的标识表记标帜-清算算法分歧 , 它利用的是多线程的标识表记标帜-断根算法 。
最短的垃圾收集搁浅时候可觉得交互比力高的程序提高用户体验 。
CMS工作机制比拟其他的垃圾收集器更为复杂 , 整体分为4个阶段:
1.初始标识表记标帜:只是标识表记标帜下GC Roots能直接联系关系的对象 , 速度很快 , 仍然需要暂停所有工作线程 。
2.并发标识表记标帜:进行GC Roots跟踪的过程 , 和用户线程一路工作 , 不需要暂停工作线程 。
3.从头标识表记标帜:为了批改在并发标识表记标帜时代 , 因用户程序继续运行而导致标识表记标帜发生变更的那一部门对象的标识表记标帜记实 , 仍然需要暂停所有工作线程 。
4.并发断根:断根GC Roots不成达对象 , 和用户线程一路工作 , 不需要暂停工作线程 。 因为耗时最长的并发标识表记标帜和并发断根过程中 , 垃圾收集线程可以和用户线程一路并发工作 , 所以总体上来看CMS收集器的内存收受接管和用户线程是一路并发地执行 。
推荐阅读
- 四 Java面试之JVM复习
- java下载太慢了怎么办
- java类继承你知道多少
- 如何创建一个js对象
- e5为什么被称为洋垃圾为啥E5被称为洋垃圾
- iPhone6怎么清理垃圾缓存
- 垃圾是怎么分类的?
- java对象详细介绍
- 怎么成为java架构师
- 清除体内“垃圾”喝点黑茶