jvm参数使用规则
① -XX:+<option>
开启option参数。
② -XX:-<option>
关闭option参数
③ -XX:<option>=<value>
将option参数的值设置为value。
常用参数
-Xms1024M
表示设置JVM启动内存为1024M,必须以M为单位.
-Xmx1024M
表示设置JVM启动内存的最大值为1024M,必须以M为单位。
-XX:+UseTLAB
优先在本地线程缓冲区TLAB中分配对象,避免分配内存时的锁定过程,Sever模式下默认开启。
-verbose:gc
表示输出虚拟机中GC的详细情况。
-Xss1024k
表示可以设置虚拟机栈的大小为1024k。
-Xoss1024k
表示设置本地方法栈的大小为1024k。Hotspot不区分本地方法栈和虚拟机栈的,所以参数对于Hotspot无效。
-Xmn20M
表示设置年轻代的大小为20M**
-XX:PermSize=1024M
表示JVM初始分配的永久代的容量,必须以M为单位。
-XX:MaxPermSize=1024M
表示JVM允许分配的永久代的最大容量,必须以M为单位,大部分情况下这个参数默认为64M。
-XX:+TraceClassLoading
表示查看类的加载信息
-XX:+TraceClassUnLoading
表示查看类的卸载信息
-XX:+HeapDumpOnOutOfMemoryError
表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照
-XX:CompileThreshold=1000
表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译
-XX:+UseTLAB
开启TLAB分配
-XX:TLABSize
设置TLAB大小
-XX:+ResizeTLAB
自动调整TLAB大小
-XX:+PrintTLAB
表示可以看到TLAB的使用情况
-XX:+UseSpining
开启自旋锁
-XX:+PreBlockSpin
更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁。
GC参数
-Xnoclassgc
表示关闭JVM对类的垃圾回收
-XX:+PrintGCDetails
表示在控制台上打印出GC详细信息
-XX:+PrintGC
表示在控制台上打印出GC信息
-XX:+PrintGCTimeStamps
打印GC停顿耗时
-XX:+PrintHeapAtGC
表示可以看到每次GC前后堆内存布局
-XX:+DisableExplictGC
禁用显示GC
-XX:+ExplictGCInvokesConcurrent
使用并发方式处理显示GC
----------串行垃圾回收器-----------
-XX:UseSerialGC
新生代和老年代都使用串行垃圾收集器。
-XX:NewRatio=4
表示设置年轻代:老年代的大小比值为1:4,这意味着年轻代占整个堆的1/5。
-XX:SurvivorRatio=8
表示设置2个Survivor区:1个Eden区的大小比值为2:8,这意味着Survivor区占整个年轻代的1/5,这个参数默认为8。
-XX:PretenureSizeThreshold=3145728
表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位
XX:MaxTenuringThreshold=1
表示对象年龄大于1,自动进入老年代
例子
(1)类的加载与跟踪
public class FollowClass {
public static void main(String[] args) {
Object obj = new Object();
}
}
[root@izuf6ea4rfo45y44oj74jhz workspace]# java -XX:+TraceClassLoading FollowClass
[Opened /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Type from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
[Loaded java.lang.Class from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/rt.jar]
。。。。
(2)简单GC日志
public class FollowClass {
public static void main(String[] args) {
byte[] b = null;
for (int i = 0 ; i < 10 ; i++) {
b = new byte[1 * 1024 * 1024];
}
}
}
root@izuf6ea4rfo45y44oj74jhz workspace]# java -Xmx20m -Xms5m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGC FollowClass
[GC (Allocation Failure) 4474K->4351K(5888K), 0.0009090 secs]
[Full GC (Allocation Failure) 4351K->1278K(5888K), 0.0017932 secs]
说明:GC收集新生代、Full GC收集整个堆。
网友评论