垃圾回收总结和面试和应用
1. 原理概念理解. 并发,并行. 浮动垃圾.cms二次回收.
2. 组合关系,为啥不能组合. 对应的jvm配置
3. 细节调优, cms 的几种fail .内存大小
#并行和并发
- 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
- 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行。而垃圾收集程序运行在另一个CPU上。
#吞吐量(Throughput)
吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即
吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间)。
假设虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
#垃圾回收大图及组合关系
#总结表格
收集器 | 参数来自官网 | 串行、并行or并发 | 新生代/老年代 | 算法 | 目标 | 适用场景 |
---|---|---|---|---|---|---|
Serial |
-XX:+UseSerialGC |
串行 | 新生代 | 复制算法 | 响应速度优先 | 单CPU环境下的Client模式 |
Serial Old |
作为cms的兜底. |
串行 | 老年代 | 标记-整理 | 响应速度优先 | 单CPU环境下的Client模式、CMS的后备预案 |
ParNew |
-XX:+UseParNewGC 当-XX:+UseConcMarkSweepGC 时,该参数自动打开. |
并行 | 新生代 | 复制算法 | 响应速度优先 | 多CPU环境时在Server模式下与CMS配合 |
Parallel Scavenge |
-XX:+UseParallelGC 会自动打开UseParallelOldGC. |
并行 | 新生代 | 复制算法 | 吞吐量优先 | 在后台运算而不需要太多交互的任务 |
Parallel Old |
-XX:+UseParallelOldGC 会自动打开UseParallelGC. |
并行 | 老年代 | 标记-整理 | 吞吐量优先 | 在后台运算而不需要太多交互的任务 |
CMS | 自动打开ParNew并且把Serial Old作为兜底. | 并发 | 老年代 | 标记-清除 | 响应速度优先 | 集中在互联网站或B/S系统服务端上的Java应用 |
G1 | 跨代. | 并发 | both | 标记-整理+复制算法 | 响应速度优先 | 面向服务端应用,将来替换CMS |
原理:
新生代stw么?
浮动垃圾是啥?
cms remark阶段为啥要要stopTheWord?
浮动垃圾和cms为啥不矛盾?
垃圾回收分位allocated和free两大块. 浮动垃圾是在remark后的free块上生成的,而remark之前的阶段和用户线程是并发的,所以不能锁死哪些是free,哪些是allocated?