jvm的传唱-垃圾收集器
时间、能力有限,本章节主要针对 Parallel Scavenge收集器、和G1收集器进行简单介绍,各位可以踊跃提出自己的见解在评论区发表。
Parallel Scanvenge
称为吞吐量优先收集器,是一个新生代收集器。使用复制算法的并行多线程收集器。Parallel Scavenge是Java1.8默认的收集器,特点是并行的多线程回收,以吞吐量优先。
- Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput);
- 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)-->(虚拟机总共运行100分钟,垃圾收集时间为1分钟,那么吞吐量就是99%)
- 自适应调节策略,自动指定年轻代、Eden、Suvisor区的比例
- 开启使用方式:-XX:+UseParallelGC
G1
Garbage First是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器,以极高概率满足GC停顿时间的同时,还兼具高吞吐量的性能特征。
- G1把内存划分为多个独立的区域Region,把每一份当作一个小目标,每一份收集时间自然是很好控制的
- G1仍然保留分代思想,保留了新生代和老年代,但他们不再是物理隔离,而是一部分Region的集合,但是它的比例并不是那么"固定",为了达到MaxGCPauseMillis所规定的效果,G1会自动调整两者之间的比例(可以通过 -XX:NewRatio 参数进行强制比例设置,使自动适应失效)
- G1能够充分利用多CPU、多核环境硬件优势,尽量缩短STW(STOP THE WORLD)
G1常用的一些参数配置如下
-XX:+UseG1GC 使用 G1 垃圾收集器
-XX:MaxGCPauseMillis=200 设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到)
-XX:InitiatingHeapOccupancyPercent=45 mixed gc中也有一个阈值参数 ,当老年代大小占整个堆大小百分比达到该阈值时,会触发一次mixed gc. 默认值为45.
-XX:NewRatio=n 新生代与老生代(new/old generation)的大小比例(Ratio). 默认值为2.
-XX:SurvivorRatio=n eden/survivor 空间大小的比例(Ratio). 默认值为 8.
-XX:MaxTenuringThreshold=n 提升年老代的最大临界值(tenuring threshold). 默认值为 15.
-XX:ParallelGCThreads=n 设置垃圾收集器在并行阶段使用的线程数,默认值随JVM运行的平台不同而不同.
-XX:ConcGCThreads=n 并发垃圾收集器使用的线程数量. 默认值随JVM运行的平台不同而不同.
-XX:G1ReservePercent=n 设置堆内存保留为假天花板的总量,以降低提升失败的可能性. 默认值是 10.
-XX:G1HeapRegionSize=n 使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.