JVM参数配置

一、Trace跟踪参数:

1、打印GC的简要信息:

配置详解:

首先在idea的run选项卡中找到edit configurations。

在下图中的VM options中填写如下参数:

-verbose:gc
-XX:+PrintGC

在测试代码中加入一句并运行:

System.gc();

解释:这里是说,GC之前用了4M左右内存,GC后用了0.7M左右。

2、打印GC的详细信息:

-XX:+PrintGCDetails

Heap
 PSYoungGen      total 38400K, used 14248K [0x00000000d5f00000, 0x00000000d8980000, 0x0000000100000000)
  eden space 33280K, 42% used [0x00000000d5f00000,0x00000000d6cea288,0x00000000d7f80000)
  from space 5120K, 0% used [0x00000000d8480000,0x00000000d8480000,0x00000000d8980000)
  to   space 5120K, 0% used [0x00000000d7f80000,0x00000000d7f80000,0x00000000d8480000)
 ParOldGen       total 87552K, used 0K [0x0000000081c00000, 0x0000000087180000, 0x00000000d5f00000)
  object space 87552K, 0% used [0x0000000081c00000,0x0000000081c00000,0x0000000087180000)
 Metaspace       used 3212K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 349K, capacity 388K, committed 512K, reserved 1048576K
 PSYoungGen:Paralle Scavenge(年轻代)

3、打印GC的时间戳:

-XX:+PrintGCTimeStamps

理解GC日志的含义:

例如下面这段日志:

[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

上方日志的意思是说:这是一个新生代的GC。方括号内部的“4416K->0K(4928K)”含义是:“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”。而在方括号之外的“4790K->374K(15872K)”表示“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”。

再往后看,“0.0001897 secs”表示该内存区域GC所占用的时间,单位是秒。

 

-XX:+PrintHeapAtGC
-XX:+TraceClassLoading
[Loaded jvmTest1 from file:/I:/IdeaProjects/LeetCode/out/production/JVMTest/]
[Loaded sun.launcher.LauncherHelper$FXHelper from C:Program FilesJavajdk1.8.0_191jrelib
t.jar]
[Loaded java.lang.Class$MethodArray from C:Program FilesJavajdk1.8.0_191jrelib
t.jar]
[Loaded java.lang.Void from C:Program FilesJavajdk1.8.0_191jrelib
t.jar]
[Loaded java.lang.Shutdown from C:Program FilesJavajdk1.8.0_191jrelib
t.jar]
[Loaded java.lang.Shutdown$Lock from C:Program FilesJavajdk1.8.0_191jrelib
t.jar]
-Xmx1024m -Xms1024m

Xmx=981.5M
free mem=959.1398468017578M
total mem=981.5M

        byte[] b = new byte[100 * 1024 * 1024];
        System.out.println("分配了100M空间给数组");

        System.out.println("Xmx=" + Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M");   //系统的最大空间

        System.out.println("free mem=" + Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M");   //系统的空闲空间

        System.out.println("total mem=" + Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M");
分配了100M空间给数组
Xmx=981.5M
free mem=866.1399383544922M
total mem=981.5M
原文地址:https://www.cnblogs.com/JohnTeslaaa/p/10264961.html