垃圾回收总结和面试和应用

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?