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.

 

 

posted @ 2021-07-23 14:15  另类文明传道者  阅读(59)  评论(0编辑  收藏  举报