垃圾回收器-hotspot实现
ParNew
-XX:+ UseConcMarkSweepGC 的默认新生代收集器
-XX:ParallelGCThreads
GC线程数
Parallel Scavenge
吞吐量
吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)
-XX:MaxGCPauseMillis
垃圾回收时间尽量不超过
-XX:GCTimeRatio
垃圾收集时间占总时间的比率
-XX:UseAdaptiveSizePolicy
自动设置 动态调整
GC Ergonomics
Serial Old
client
server
与Paralle Scavenge
CMS的后备预案
Concurrent Mode Failusre时使用
CMS Concurrent Mark Sweep
标记-清除算法
减少回收停顿时间
步骤
初始标记
快
标记GC Roots能直接关联的对象
重新标记
修正并发标记期间用户程序继续运行产生变动的那一部分对象的标记记录
比初始标记时间长
比并发标记时间短
缺点 cons
CPU敏感
GC线程占用CPU资源导致 吞吐量下降
无法处理浮动垃圾
垃圾收集阶段用户程序还要运行所以还要预留空间 不能被填满再回收
-XX:CMSInitiationgOccupancyFraction
Concurrent Mode Failure 启用Serial Old
碎片
-XX:+UseCMSCompactAtFullCollection
FullGC时开启内存碎片的合并整理过程
-XX:CMSFullGCsBeforeCompaction
执行多少次不压缩FullGC后 来一次带压缩的 0 表示每次都压
-XX:+UseConcMarkSweep
+XX:+ScavengeBeforeRemark 触发Minor GC
http://incdn1.b0.upaiyun.com/2014/11/fcc8b26b654194d19118c91c0a73f432.jpg
G1
G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。
G1也可以在回收内存之后对剩余的堆内存空间进行压缩。
并发扫描标记垃圾回收器在STW情况下压缩内存。
G1垃圾回收会优先选择第一块垃圾最多的区域
通过JVM参数 –XX:+UseG1GC 使用G1垃圾回收器
http://ifeve.com/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3g1%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8/
组合<br>
什么时间节点回收
GC Roots枚举效率
OopMap Ordinary Object Pointer
安全域
线程挂起怎么办
一段代码中,引用关系不会发生变化
1.标识线程自己进入了safe regin
2.离开时检查系统是否已经完成GC过程
-XX:+PrintGCApplicationStoppedTime