JVM运行模式
- Server (启动慢,稳定后快)
- Client
年轻代常见的垃圾收集器
Serial收集器(复制算法)
单线程收集,进行垃圾收集时,必须暂停所有的工作线程
简单高效,Cilent模式下默认的年轻代收集器
ParNew收集器(复制算法)
多线程收集,其余行为和Serial一样
单核执行效率不如Serial,再多核下执行才有优势
Parallel Scavenge收集器(复制算法)
吞吐量 = 运行用户代码时间/(运行用户代码时间+垃圾收集时间)
比起关注用户线程停顿时间,更关注系统吞吐量
在多核下执行才有优势,Server模式下默认的年轻代收集器
老年代常见的收集器
Serial Old收集器(标记-整理算法)
单线程收集,进行垃圾收集时,必须暂停所有的工作线程
简单高效,Cilent模式下默认的老年代收集器
Parallel Old收集器(标记整理算法)JDK6之后提供
比起关注用户线程停顿时间,更关注系统吞吐量
CMS收集器(标记-清除算法)
初始化标记:stop-the-world
并发标记:并发追溯标记,程序不会停顿
并发预处理:查找执行并发标记阶段从年轻代晋升到老年代的对象
重新标记:暂停虚拟机,扫描CMS堆中的剩余对象
并发清理:清理垃圾对象,程序不会停顿
并发重置:重置CMS收集器的数据结构
G1(Garbage First)收集器(复制+标记-整理算法)
并发和并行
分代收集
空间整合
可预测的停顿
将整个Java堆划分为多个大小相等的Region
年轻代和老年代不在物理隔离