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 Files\Java\jdk1.8.0_191\jre\lib\rt.jar]
[Loaded java.lang.Class$MethodArray from C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar]
[Loaded java.lang.Void from C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar]
[Loaded java.lang.Shutdown from C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.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

 

posted @ 2019-01-17 22:31  JohnTesla  阅读(311)  评论(0编辑  收藏  举报