JVM性能调优(2) —— 内存设置和查看GC日志

JVM性能调优(2) —— 内存设置和查看GC日志,第1张

1)JVM内存分配有如下一些参数:

一般 -Xms 和 -Xmx 设置一样的大小,-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 设置一样的大小。-Xms 等价于 -XX:InitialHeapSize,-Xmx等价于-XX:MaxHeapSize;-Xmn等价于-XX:MaxNewSize。

2)在IDEA中可以按照如下方式设置JVM参数:

3)命令行启动时可以按照如下格式设置:

1)设置GC参数:

可以在启动时加上如下参数来查看GC日志

例如,我在IDEA中添加了如下JVM启动参数:

启动程序之后打印郑宽出了如下的一些日志:

从第三行 CommandLine flags 可以得到如下的信息:

2)查看默认参数:

如果要查看JVM的默认参数,就可以通过给JVM加打印GC日志的参数,就可以在GC日志中看到JVM的默认参数了。

还可以在启动参数中添加 -XX:+PrintFlagsFinal 参数,将会打印系统的所橡中有参数,就可以看到自己配置的参数或系统的默认参数了:

3)GC日志:

之后的日志就是每次垃圾回收时产生的日志,每行日志说明了这次GC的执行情况,例如第四行GC日志:

详细内容如下:

2020-09-25T13:00:41.631+0800:GC发生的时间点。

4.013:系统运行多久之后发生的GC,单位秒,这里就是系统运行 4.013 秒后发生了一次GC。

GC (Allocation Failure):说明了触发GC的原因,这里是指对象分配失败导致的GC。

PSYoungGen:指触发的是年轻代的垃圾回收,使用的是 Parallel Scavenge 垃圾回收器。

419840K->20541K:对年轻代执行了一次GC,GC之前年轻代使用了 419840K,GC之后有 20541K 的对象活下来了。

(472064K):年轻代可用空间是 472064K,即 461 M,为什么是461M呢?因为新生代大小为 512M,Eden 区占 409.6M,两块 Survivor 区各占 51.2M,所以年轻代的可用空间为 Eden+1个Survivor的大小,即460.8M,约为461M。

419840K->20573K:GC前整个堆内存使用了 419840K,GC之后堆内存使用了 20573K。

(996352K):整个堆的大小是 996352K,即 973M,其实就是年轻代的 461M + 老年代的 512 M

0.0118345 secs:本次GC耗费的时间

Times: user=0.00 sys=0.00, real=0.01 secs:本次GC耗费的时间

4)JVM退出时的喊如亮GC情况:

程序结束运行后,还会打印一些日志,就是第12行之后的日志,这部分展示的是当前堆内存的使用情况:

详细内容如下:

1. Run as ->Run configurations ->java应用名 ->arguments ->VM arguments,加入jvm参数就行

2. 测试代码

[java] view plain copy

package cn.erong.test

public class Jtest {

private static final int _1M = 1024*1024

public static void main(String[] args) {

byte[] allocation1,allocation2,allocation3,allocation4

allocation1 = new byte[_1M/4]

allocation2 = new byte[_1M/4]

allocation3 = new byte[4*_1M]

allocation4 = new byte[4*_1M]

allocation4 = null

allocation4 = new byte[4*_1M]

}

}

3.  测试看下,在vm arguments 中加入

[java] view plain copy

-Xms20m --jvm堆的最小值

-Xmx20m --jvm堆的最大值

-XX:+PrintGCTimeStamps -- 贺弊打印出GC的时间信息

-XX:+PrintGCDetails  --打印出GC的详细信息

-verbose:gc --开启gc日志

-Xloggc:d:/gc.log -- gc日志的存放位置

-Xmn10M -- 新生代内存区域的大小

-XX:SurvivorRatio=8 --新生代内禅皮族存区域中Eden和Survivor的比例

4 . run  看下日志,到d盘找到 gc.log,如下

[plain] view plain copy

Java HotSpot(TM) Client VM (25.151-b12) for windows-x86 JRE (1.8.0_151-b12), built on Sep  5 2017 19:31:49 by "java_re" with MS VC++ 10.0 (VS2010)

Memory: 4k page, physical 3567372k(982296k free), swap 7133056k(3042564k free)

CommandLine flags: -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=10485760 -XX:NewSize=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 握凯-XX:-UseLargePagesIndividualAllocation

0.091: [GC (Allocation Failure) 0.091: [DefNew: 5427K->995K(9216K), 0.0036445 secs] 5427K->5091K(19456K), 0.0038098 secs] [Times: user=0.00 sys=0.02, real=0.00 secs]

0.095: [GC (Allocation Failure) 0.095: [DefNew: 5091K->0K(9216K), 0.0012412 secs] 9187K->5090K(19456K), 0.0012908 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

Heap

def new generation   total 9216K, used 4260K [0x04000000, 0x04a00000, 0x04a00000)

eden space 8192K,  52% used [0x04000000, 0x044290e8, 0x04800000)

from space 1024K,   0% used [0x04800000, 0x04800000, 0x04900000)

to   space 1024K,   0% used [0x04900000, 0x04900000, 0x04a00000)

tenured generation   total 10240K, used 5090K [0x04a00000, 0x05400000, 0x05400000)

the space 10240K,  49% used [0x04a00000, 0x04ef8ac0, 0x04ef8c00, 0x05400000)

Metaspace       used 84K, capacity 2242K, committed 2368K, reserved 4480K


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12490683.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存