GC相关的常用参数

来自ling
跳转至: 导航搜索

除了上面提及的一些参数,下面补充一些和GC相关的常用参数:

-Xmx: 设置堆内存的最大值。

-Xms: 设置堆内存的初始值。

-Xmn: 设置新生代的大小。

-Xss: 设置栈的大小。

-PretenureSizeThreshold: 直接晋升到老年代的对象大小,设置这个参数后,大于这个参数的对象将直接在老年代分配。

-MaxTenuringThrehold: 晋升到老年代的对象年龄。每个对象在坚持过一次Minor GC之后,年龄就会加1,当超过这个参数值时就进入老年代。

-UseAdaptiveSizePolicy: 在这种模式下,新生代的大小、eden 和 survivor 的比例、晋升老年代的对象年龄等参数会被自动调整,以达到在堆大小、吞吐量和停顿时间之间的平衡点。在手工调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量 (GCTimeRatio) 和停顿时间 (MaxGCPauseMills),让虚拟机自己完成调优工作。

-SurvivorRattio: 新生代Eden区域与Survivor区域的容量比值,默认为8,代表Eden: Suvivor= 8: 1。

-XX:ParallelGCThreads:设置用于垃圾回收的线程数。通常情况下可以和 CPU 数量相等。但在 CPU 数量比较多的情况下,设置相对较小的数值也是合理的。

-XX:MaxGCPauseMills:设置最大垃圾收集停顿时间。它的值是一个大于 0 的整数。收集器在工作时,会调整 Java 堆大小或者其他一些参数,尽可能地把停顿时间控制在 MaxGCPauseMills 以内。

-XX:GCTimeRatio:设置吞吐量大小,它的值是一个 0-100 之间的整数。假设 GCTimeRatio 的值为 n,那么系统将花费不超过 1/(1+n) 的时间用于垃圾收集。

在JDK1.8开始有了元空间区(Matespace)来替换永久代(Permanent Generation),那么在设置JVM参数的时候,也要增加上Matespace的相关参数了。

-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m


Jvm8.png

从图中可以看出: 堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。

默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。

默认的,Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。

JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。

因此,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。

设置新生代中eden和S0/S1空间的比例 默认

-XX:SurvivorRatio=8,Eden:S0:S1=8:1:1

假如

-XX:SurvivorRatio=4,Eden:S0:S1=4:1:1

SurvivorRatio值就是设置Eden区的比例占多少,S0/S1相同

-XX:NewRatio=2

表示新生代占1,老年代占2。则新生代占整个堆的1/3。(这个参数一般不会使用) 默认情况下,新生代和老年代的比例是1:2。

Jvm502.jpg

Jvm7.jpg

Jvm3.jpg

Jvm.png

Jvm1.jpg

Jvm2.jpg

Jvm4.jpg