一、生成gc.log
第一步:右键项目或文件——Run As——Run Configurations。
第二步:点击Arguments,在VM arguments中填写-Xloggc:F:/gc.log,点击Apply,最后点击Run。(可在自己选定目录中生成gc.log,例如:我选择的是F盘目录下)
或者(VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728 -Xloggc:F:/gc.log)
第三步:进入F盘,这时候会看到在F盘中生成了文件“gc.log”,用记事本打开即可查看该文件运行的GC日志。
二、查看日志信息
0.187: [GC (System.gc()) 2003K->688K(125952K), 0.0014071 secs]
0.189: [Full GC (System.gc()) 688K->559K(125952K), 0.0076203 secs]
---0.187:GC发生的时间(从虚拟机启动以来经过的秒数)
---[GC / Full /:本次垃圾收集的停顿类型,有Full表示这次GC是发生了Stop-The-World的
---System.gc():调用了System.gc()方法的收集
---2003K->688K(125952K)
表示GC前该内存区域已使用容量->GC后该内存区域已使用容量,后面圆括号里面的125952K为该内存区域的总容量。
不同的收集器打印出的信息稍有不同:
[GC类型 (System.gc()) [Young区: GC前Young的内存占用->GC后Young的内存占用(Young区域总大小)]
[old老年代: GC前Old的内存占用->GC后Old的内存占用(Old区域总大小)] GC前堆内存占用->GC后堆内存占用(JVM堆总大小),
[永久代区: GC前占用大小->C后占用大小(永久代区总大小)], GC用户耗时] [Times:用户耗时 sys=系统时间, real=实际时间]
三、VM参数
1、限制 Java 堆的大小为 20M,且不可扩展:
-Xms20m -Xmx20m
2、打印加载类的详细信息
-verbose:gc
3、新生代堆大小1G
-XX:SurvivorRatio=8
4、虚拟机在出现内存溢出异常时Dump 出当前的内存堆转储快照
-XX:+TraceClassLoading
5、打印加载类的详细信息
-XX:+PrintGCDetails