详细信息参考:Oracle官方文档
环境信息:Windows10
JDK:1.8
Trace跟踪参数
public class Test { public static void main(String[] args) { byte[] bytes = null; for (int i = 0; i < 10; i++) { bytes = new byte[1 * 1024 * 1024]; } } }
以上述代码为例,展示各个参数结果。
- -verbose:gc 或 -XX:+printGC
作用:打印GC的简要信息
参数:
-Xmx10m -Xms5m -verbose:gc
-Xmx10m -Xms5m -XX:+printGC
...... [GC (Allocation Failure) 7362K->7217K(8704K), 0.0006685 secs] [GC (Allocation Failure) 7217K->7257K(9728K), 0.0006430 secs] [Full GC (Allocation Failure) 7257K->1828K(6656K), 0.0065725 secs]
- -XX:+PrintGCDetails
作用:打印GC详细信息
参数:
-Xmx10m -Xms5m -XX:+PrintGCDetails
[GC (Allocation Failure) [PSYoungGen: 504K->504K(2560K)] 7133K->7133K(9728K), 0.0005841 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [Full GC (Allocation Failure) [PSYoungGen: 504K->0K(2560K)] [ParOldGen: 6629K->1868K(4096K)] 7133K->1868K(6656K), [Metaspace: 3448K->3448K(1056768K)], 0.0046903 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 2560K, used 1044K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 2048K, 51% used [0x00000000ffd00000,0x00000000ffe05370,0x00000000fff00000) from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 5632K, used 4940K [0x00000000ff600000, 0x00000000ffb80000, 0x00000000ffd00000) object space 5632K, 87% used [0x00000000ff600000,0x00000000ffad31a8,0x00000000ffb80000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
- -XX:+PrintGCDateStamps
作用:打印GC发生的时间戳
参数:
-Xmx10m -Xms5m -XX:+PrintGCDetails -XX:+PrintGCDateStamps
...... 2018-08-14T10:23:15.832+0800: [GC (Allocation Failure) [PSYoungGen: 496K->480K(2560K)] 7158K->7166K(9728K), 0.0004435 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 2018-08-14T10:23:15.832+0800: [Full GC (Allocation Failure) [PSYoungGen: 480K->0K(2560K)] [ParOldGen: 6686K->1828K(4096K)] 7166K->1828K(6656K), [Metaspace: 3448K->3448K(1056768K)], 0.0043986 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 2560K, used 1085K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 2048K, 53% used [0x00000000ffd00000,0x00000000ffe0f758,0x00000000fff00000) from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 5632K, used 4900K [0x00000000ff600000, 0x00000000ffb80000, 0x00000000ffd00000) object space 5632K, 87% used [0x00000000ff600000,0x00000000ffac9050,0x00000000ffb80000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
- -Xloggc:log/gc.log
作用:指定GC log的输出位置,以文件输出(目录需要手动创建,文件会自动创建)
参数:
-Xmx10m -Xms5m -XX:+PrintGCDetails -Xloggc:d:/log/gc.log
- -XX:+PrintHeapAtGC
作用:每一次GC前后,都打印堆的信息
参数:
-Xmx10m -Xms5m -XX:+PrintHeapAtGC
...... {Heap before GC invocations=4 (full 0): PSYoungGen total 1536K, used 504K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 1024K, 0% used [0x00000000ffd00000,0x00000000ffd00000,0x00000000ffe00000) from space 512K, 98% used [0x00000000ffe00000,0x00000000ffe7e010,0x00000000ffe80000) to space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000) ParOldGen total 7168K, used 6617K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000) object space 7168K, 92% used [0x00000000ff600000,0x00000000ffc76760,0x00000000ffd00000) Metaspace used 3447K, capacity 4496K, committed 4864K, reserved 1056768K class space used 375K, capacity 388K, committed 512K, reserved 1048576K Heap after GC invocations=4 (full 0): PSYoungGen total 2560K, used 480K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 2048K, 0% used [0x00000000ffd00000,0x00000000ffd00000,0x00000000fff00000) from space 512K, 93% used [0x00000000fff80000,0x00000000ffff8030,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 7168K, used 6697K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000) object space 7168K, 93% used [0x00000000ff600000,0x00000000ffc8a770,0x00000000ffd00000) Metaspace used 3447K, capacity 4496K, committed 4864K, reserved 1056768K class space used 375K, capacity 388K, committed 512K, reserved 1048576K } {Heap before GC invocations=5 (full 1): PSYoungGen total 2560K, used 480K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 2048K, 0% used [0x00000000ffd00000,0x00000000ffd00000,0x00000000fff00000) from space 512K, 93% used [0x00000000fff80000,0x00000000ffff8030,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 7168K, used 6697K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000) object space 7168K, 93% used [0x00000000ff600000,0x00000000ffc8a770,0x00000000ffd00000) Metaspace used 3447K, capacity 4496K, committed 4864K, reserved 1056768K class space used 375K, capacity 388K, committed 512K, reserved 1048576K Heap after GC invocations=5 (full 1): PSYoungGen total 2560K, used 0K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) eden space 2048K, 0% used [0x00000000ffd00000,0x00000000ffd00000,0x00000000fff00000) from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 4096K, used 1828K [0x00000000ff600000, 0x00000000ffa00000, 0x00000000ffd00000) object space 4096K, 44% used [0x00000000ff600000,0x00000000ff7c9020,0x00000000ffa00000) Metaspace used 3447K, capacity 4496K, committed 4864K, reserved 1056768K class space used 375K, capacity 388K, committed 512K, reserved 1048576K }
- -Xmx10m -Xms5m -XX:+TraceClassLoading
作用:监控类的加载
参数:
-Xmx10m -Xms5m -XX:+TraceClassLoading
[Opened D:\Dev_Tools\Java\jdk1.8.0_161\jre\lib\rt.jar] [Loaded java.lang.Object from D:\Dev_Tools\Java\jdk1.8.0_161\jre\lib\rt.jar] [Loaded java.io.Serializable from D:\Dev_Tools\Java\jdk1.8.0_161\jre\lib\rt.jar] ...... [Loaded java.lang.Shutdown from D:\Dev_Tools\Java\jdk1.8.0_161\jre\lib\rt.jar] [Loaded java.lang.Shutdown$Lock from D:\Dev_Tools\Java\jdk1.8.0_161\jre\lib\rt.jar]
- -XX:+PrintClassHistogram
作用:打印类的信息,包含实例数量、总大小、类型等
参数:
-Xmx10m -Xms5m -XX:+PrintClassHistogram
按下Ctrl+Break后,打印类的信息
num #instances #bytes class name ---------------------------------------------- 1: 46 1082640 [B 2: 3013 416608 [C 3: 639 72976 java.lang.Class 4: 2863 68712 java.lang.String 5: 624 36816 [Ljava.lang.Object; 6: 791 31640 java.util.TreeMap$Entry 7: 782 18768 java.util.LinkedList$Node 8: 485 15520 java.util.HashMap$Node 9: 394 12608 java.util.LinkedList ......
堆分配参数
- -Xmx –Xms
作用:指定最大堆和最小堆。在分配堆空间时,最好保持-Xmx –Xms数值一致,以免
参数:-Xmx20m -Xms5m
byte[] bytes = new byte[1 * 1024 * 1024]; // 堆总大小 System.out.print("Xmx="); System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M"); // 当前剩余可用空间 System.out.print("free mem="); System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M"); // 当前总共分配空间 System.out.print("total mem="); System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");
分配1M空间给数组 Xmx=18.0M free mem=4.182762145996094M total mem=6.5M
由于Java会尽可能维持在最小堆运行,所以total mem会尽可能保持较小的值。
byte[] bytes = new byte[6 * 1024 * 1024]; // 堆总大小 System.out.print("Xmx="); System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M"); // 当前剩余可用空间 System.out.print("free mem="); System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M"); // 当前总共分配空间 System.out.print("total mem="); System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");
分配6M空间给数组 Xmx=18.0M free mem=4.718879699707031M total mem=12.0M
- -Xmn
作用:设置新生代大小。官方推荐新生代占堆的3/8。
- -XX:NewRatio
作用:设置新生代(eden+2*s)和老年代(不包含永久区)的比值。比如-XX:NewRatio=4表示: 新生代:老年代 = 1:4,即新生代占1/5
- -XX:SurvivorRatio
作用:设置两个Survivor区和eden的比。比如-XX:SurvivorRatio=8表示:两个Survivor:eden=2:8,即一个Survivor占新生代的1/10。官方推荐Survivor占新生代的1/10。
- -XX:+HeapDumpOnOutOfMemoryError
作用:OOM时将堆信息导出到文件中
- -XX:+HeapDumpPath
作用:指定OOM时导出的文件路径
参数:-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
public class Test { public static void main(String[] args) { Vector vector = new Vector(); for (int index = 0; index < 25; index++) { vector.add(new byte[1 * 1024 * 1024]); } } }
java.lang.OutOfMemoryError: Java heap space Dumping heap to d:/a.dump ... Heap dump file created [15379974 bytes in 0.049 secs] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.example.demo.test.Test.main(Test.java:14)
- -XX:OnOutOfMemoryError
作用:在OOM时,执行一个脚本。可以在OOM时发送邮件告警、甚至重启程序。
- -XX:PermSize -XX:MaxPermSize
作用:设置永久区的初始空间和最大空间,与-Xmx –Xms类似。
堆分配实例
public class Test { public static void main(String[] args) { byte[] bytes = null; for (int index = 0; index < 10; index++) { bytes = new byte[1 * 1024 * 1024]; } } }
- -Xmx20m -Xms20m -Xmn1m -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代大小为1M。
[GC (Allocation Failure) [PSYoungGen: 512K->504K(1024K)] 512K->512K(19968K), 0.0008422 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1024K->672K(19968K), 0.0009345 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1184K->847K(19968K), 0.0007328 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1359K->927K(19968K), 0.0005718 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 1024K, used 830K [0x00000000ffe80000, 0x0000000100000000, 0x0000000100000000) eden space 512K, 63% used [0x00000000ffe80000,0x00000000ffed1888,0x00000000fff00000) from space 512K, 98% used [0x00000000fff80000,0x00000000ffffe010,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 18944K, used 10663K [0x00000000fec00000, 0x00000000ffe80000, 0x00000000ffe80000) object space 18944K, 56% used [0x00000000fec00000,0x00000000ff669f88,0x00000000ffe80000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.
新生代无法分配(Eden和两个Survivor总大小为1M),对象直接在老年代分配。总共分配对象大小为10M,并未触发Full GC,所以老年代空间使用在10M左右,并没有回收。
注意最后一行,虚拟机提示新生代大小最好设置为1536K。
- -Xmx20m -Xms20m -Xmn1536K -XX:+PrintGCDetails
[GC (Allocation Failure) [PSYoungGen: 512K->504K(1024K)] 512K->544K(19968K), 0.0006121 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1056K->672K(19968K), 0.0008765 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1184K->819K(19968K), 0.0007404 secs] [Times: user=0.09 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 1016K->504K(1024K)] 1331K->963K(19968K), 0.0007809 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] Heap PSYoungGen total 1024K, used 823K [0x00000000ffe80000, 0x0000000100000000, 0x0000000100000000) eden space 512K, 62% used [0x00000000ffe80000,0x00000000ffecfc58,0x00000000fff00000) from space 512K, 98% used [0x00000000fff80000,0x00000000ffffe010,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 18944K, used 10699K [0x00000000fec00000, 0x00000000ffe80000, 0x00000000ffe80000) object space 18944K, 56% used [0x00000000fec00000,0x00000000ff672d50,0x00000000ffe80000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
貌似没啥效果!
- -Xmx20m -Xms20m -Xmn15m -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代大小为15M。
[GC (Allocation Failure) [PSYoungGen: 12249K->1520K(13824K)] 12249K->1969K(18944K), 0.0011009 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 13824K, used 2667K [0x00000000ff100000, 0x0000000100000000, 0x0000000100000000) eden space 12288K, 9% used [0x00000000ff100000,0x00000000ff21ed08,0x00000000ffd00000) from space 1536K, 98% used [0x00000000ffd00000,0x00000000ffe7c020,0x00000000ffe80000) to space 1536K, 0% used [0x00000000ffe80000,0x00000000ffe80000,0x0000000100000000) ParOldGen total 5120K, used 449K [0x00000000fec00000, 0x00000000ff100000, 0x00000000ff100000) object space 5120K, 8% used [0x00000000fec00000,0x00000000fec706d0,0x00000000ff100000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
对象全部分配在新生代中,老年代基本没有使用。新生代触发GC并回收了一部分内存(Survivor大小为1536K,因此GC时不需要老年代进行担保,即对象不会进入老年代),只有部分对象依然存在于内存中,大部分对象已被回收。
- -Xmx20m -Xms20m -Xmn7m -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代大小为7M。
[GC (Allocation Failure) [PSYoungGen: 5557K->488K(6656K)] 5557K->1909K(19968K), 0.0010793 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 5724K->488K(6656K)] 7146K->2969K(19968K), 0.0012265 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 6656K, used 2708K [0x00000000ff900000, 0x0000000100000000, 0x0000000100000000) eden space 6144K, 36% used [0x00000000ff900000,0x00000000ffb2b110,0x00000000fff00000) from space 512K, 95% used [0x00000000fff80000,0x00000000ffffa040,0x0000000100000000) to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000) ParOldGen total 13312K, used 2481K [0x00000000fec00000, 0x00000000ff900000, 0x00000000ff900000) object space 13312K, 18% used [0x00000000fec00000,0x00000000fee6c6e0,0x00000000ff900000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
对象全部分配在新生代,但是新生代GC时Survivor大小不足1M,部分对象进入老年代,还有一部分对象在GC时被回收。
- -Xmx20m -Xms20m -Xmn7m -XX:SurvivorRatio=2 -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代大小为7M,但是增大Survivor大小为新生代的1/4。
[GC (Allocation Failure) [PSYoungGen: 3457K->1000K(5632K)] 3457K->2032K(18944K), 0.0015567 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 4148K->1528K(5632K)] 5180K->2947K(18944K), 0.0010745 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 4669K->1520K(5632K)] 6088K->3019K(18944K), 0.0006911 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 5632K, used 4747K [0x00000000ff900000, 0x0000000100000000, 0x0000000100000000) eden space 4096K, 78% used [0x00000000ff900000,0x00000000ffc26cd8,0x00000000ffd00000) from space 1536K, 98% used [0x00000000ffd00000,0x00000000ffe7c050,0x00000000ffe80000) to space 1536K, 0% used [0x00000000ffe80000,0x00000000ffe80000,0x0000000100000000) ParOldGen total 13312K, used 1499K [0x00000000fec00000, 0x00000000ff900000, 0x00000000ff900000) object space 13312K, 11% used [0x00000000fec00000,0x00000000fed76c80,0x00000000ff900000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
由于扩大了Survivor大小,进入老年代的对象减少。
- -Xmx20m -Xms20m -Xmn7m -XX:SurvivorRatio=1 -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代大小为7M,但是增大Survivor大小为新生代的1/3。
[GC (Allocation Failure) [PSYoungGen: 2441K->904K(5120K)] 2441K->912K(18432K), 0.0018878 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 3007K->1976K(5120K)] 3015K->1984K(18432K), 0.0009336 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 4132K->1960K(5120K)] 4140K->1968K(18432K), 0.0008194 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 4059K->1960K(5120K)] 4067K->1968K(18432K), 0.0006821 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 4062K->1960K(5120K)] 4070K->1968K(18432K), 0.0006000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 5120K, used 4126K [0x00000000ff900000, 0x0000000100000000, 0x0000000100000000) eden space 3072K, 70% used [0x00000000ff900000,0x00000000ffb1d810,0x00000000ffc00000) from space 2048K, 95% used [0x00000000ffc00000,0x00000000ffdea030,0x00000000ffe00000) to space 2048K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x0000000100000000) ParOldGen total 13312K, used 8K [0x00000000fec00000, 0x00000000ff900000, 0x00000000ff900000) object space 13312K, 0% used [0x00000000fec00000,0x00000000fec02000,0x00000000ff900000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
继续扩大Survivor大小,没有进入老年代的对象。
- -Xmx20m -Xms20m -XX:NewRatio=1 -XX:SurvivorRatio=2 -XX:+PrintGCDetails
解释说明:堆大小为20M,新生代与老年代比例为1:1,即新生代占一半内存空间(10M),并且新生代中两个Survivor:Eden比值为2:2,即每个Survivor占新生代1/4空间(2.5M)。
[GC (Allocation Failure) [PSYoungGen: 4564K->2056K(7680K)] 4564K->2064K(17920K), 0.0012851 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC (Allocation Failure) [PSYoungGen: 6248K->1976K(7680K)] 6256K->1984K(17920K), 0.0010730 secs] [Times: user=0.03 sys=0.00, real=0.00 secs] Heap PSYoungGen total 7680K, used 6315K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000) eden space 5120K, 84% used [0x00000000ff600000,0x00000000ffa3ce18,0x00000000ffb00000) from space 2560K, 77% used [0x00000000ffd80000,0x00000000fff6e040,0x0000000100000000) to space 2560K, 0% used [0x00000000ffb00000,0x00000000ffb00000,0x00000000ffd80000) ParOldGen total 10240K, used 8K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000) object space 10240K, 0% used [0x00000000fec00000,0x00000000fec02000,0x00000000ff600000) Metaspace used 3454K, capacity 4496K, committed 4864K, reserved 1056768K class space used 376K, capacity 388K, committed 512K, reserved 1048576K
对象全部在新生代分配,且没有对象进入老年代。
栈分配参数
- -Xss
作用:指定栈大小,通常只有几百K,决定了函数调用的深度。
垃圾收集器相关参数
- -XX:+UseSerialGC:在新生代和老年代使用串行收集器
- -XX:+UseParNewGC:在新生代使用并行收集器
- -XX:+UseParallelGC :在新生代使用并行收集器,吞吐量优先
- -XX:+UseParallelOldGC:在老年代使用并行收集器,吞吐量优先
- -XX:ParallelGCThreads:设置用于并行垃圾回收的线程数,以CPU核数为依据进行设置
- -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器(CMS为并发收集器,进行回收时程序依然在运行。程序可能在内存使用将满进行垃圾回收时,继续申请内存从而导致回收失败,此时使用备用的串行收集器进行垃圾回收)
- -XX:MaxGCPauseMills:最大停顿时间(毫秒),GC尽力保证每次回收时间不超过设定值
- -XX:GCTimeRatio:垃圾收集时间占总时间的比值。默认为99,即最大允许1%的时间做GC。
- -XX:ParallelCMSThreads:设定CMS的线程数量
- -XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发(防止CMS回收失败)
- -XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理(CMS使用标记-清除算法,可能会有碎片存在)
- -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩(即碎片整理)
- -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
- -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收
- -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收
垃圾回收的工作总量基本不变,如果停顿时间设置较小,势必需要频繁GC(每次GC都需要先标记再回收)才能完成全部回收工作,那么GC所占用的时间会更多(用于响应请求的时间会相对较少,吞吐量相对较低);如果想要吞吐量较高,则GC占用时间相应较少,势必需要减少GC次数,那么每次GC的停顿时间相对较长。
相关推荐
### 常用JVM配置参数详解 #### 一、概述 Java虚拟机(JVM)是运行Java程序的核心环境,其性能的优劣直接影响到Java应用程序的执行效率。为了更好地控制JVM的行为并进行调优,熟悉JVM的配置参数至关重要。本文将深入...
总结起来,深入理解JVM内核,熟练掌握诊断技巧,并合理调整JVM配置参数,是每一个Java开发者必备的技能。通过本教程的学习,你将能够运用这些知识有效地提升应用性能,解决实际工作中的各种挑战。
### JVM配置参数详解 在Java虚拟机(JVM)的运行过程中,通过一系列的命令行参数,我们可以调整其性能和行为。以下是对JVM部分关键配置参数的详细解析,这些参数能够帮助我们优化应用程序的执行效率,管理内存,...
常用jvm参数都在这张图中,参考起来方便,是国外大神整理的
JVM 内存参数详解以及配置调优 JVM 内存参数是 Java 虚拟机中最重要的参数之一,它直接影响着 Java 应用程序的性能和稳定性。在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、...
常用JVM配置参数.pptx) JVM的配置参数对于调整性能至关重要,如-Xms、-Xmx用于设置堆内存大小,-XX:PermSize、-XX:MaxPermSize设定方法区大小,-XX:+UseConcMarkSweepGC选择垃圾收集器等。了解这些参数能帮助开发者...
本文将深入探讨JVM的常用参数设置,以及它们如何影响Java应用程序的运行。 一、JVM内存设置 1. **堆内存**: - `-Xms`:初始堆大小,例如`-Xms256m`表示初始分配256MB内存。 - `-Xmx`:最大堆大小,例如`-Xmx...
常用JVM配置参数 - **内存相关参数**: - `-Xms`:设置初始堆大小。 - `-Xmx`:设置最大堆大小。 - `-XX:PermSize`:设置永久代初始大小。 - `-XX:MaxPermSize`:设置永久代最大大小。 - **垃圾收集相关参数**...
"jvm优化参数配置"是确保Tomcat稳定运行的关键环节,能够提高应用的响应速度,减少内存泄露,提升系统整体性能。以下是对JVM参数优化的详细解释: 1. **内存配置**: - **堆内存(Heap Memory)**:分为新生代...
3. **常用JVM配置参数**:详细介绍了JVM启动时可以使用的各种参数,如-Xms、-Xmx用于设置堆内存大小,-XX:MaxPermSize设置永久代大小,-XX:+UseParallelGC选择垃圾收集器等。理解这些参数对于调优至关重要。 4. **...
常用JVM配置参数 - **概述**:合理配置JVM参数能够显著提高应用程序性能。 - **常见参数**: - `-Xms`:设置初始堆大小。 - `-Xmx`:设置最大堆大小。 - `-XX:NewRatio`:设置年轻代与老年代的比例。 - `-XX:+...
这些参数用于调整JVM的内存分配、垃圾收集行为以及各种其他配置选项。以下是一些关键的JVM参数及其作用: 1. **Xms** 和 **Xmx**: 这两个参数用于设置Java堆内存的大小。`Xms`设定初始堆大小,而`Xmx`设定最大堆...
本文将详细介绍一些常用的JVM参数设置,这些参数适用于线上关键业务系统,并且具有较高的通用性。 #### 二、学习资源推荐 1. **开源项目启动脚本**:参考成熟的开源项目如ElasticSearch和Cassandra的启动脚本可以...
常用jvm参数都在这张图中,参考起来方便,是国外大神整理的
合理的JVM参数配置可以显著提升Eclipse的启动速度和运行效率。 #### 三、关键JVM参数解析 - **-Xms128m**:设置JVM的初始堆内存大小为128MB。这是JVM启动时分配给堆内存的最小值,有助于减少JVM启动初期由于堆内存...
### jvm常用命令工具 #### 一、概述 在程序运行过程中,经常会出现各种各样的问题,例如性能瓶颈、内存泄漏、死锁等。为了快速定位并解决问题,我们需要收集多种类型的运行时信息,包括但不限于系统日志、堆转储...
Java虚拟机(JVM)作为Java程序执行的基础环境,其配置参数对于确保应用高效稳定运行至关重要。特别是在Java、J2EE等大型应用中,通过合理设置JVM参数可以极大提升系统的整体性能与稳定性。 #### JVM 非标准参数的...