JVM性能调优-小测试

JDK自带的jvm调优工具jvisuaLVM

Java VisualVM默认的插件中心网址已关闭服务,已经把服务迁移到github,可以进入这个网址https://visualvm.github.io/pluginscenters.html查询不同JDK版本对应的插件下载地址,再把java VisualVM插件中的设置里的插件中心地址改成对应的下载地址即可。
JVM性能调优-小测试

配置

eclipse配置文件eclipse.ini,添加

-Xms256m 最小堆内存
-Xmx1024m 最大堆内存

eclipse配置文件eclipse.ini,打印出gc日志

-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:F:\android\eclipse3.18\eclipse\gc\gc.log

重启eclispe在gc.log会打印出gc日志
JVM性能调优-小测试
我们拿上面一条GC出来分析,如

2017-07-19T21:40:40.432+0800: 18.498: [GC (GCLocker Initiated GC) [PSYoungGen: 123909K->23017K(125952K)] 170172K->74234K(427008K), 0.0516005 secs] [Times: user=0.09 sys=0.00, real=0.05 secs]

2017-07-19T21:40:40.432+0800: 时间戳
18.498: 启动到发生gc的时间
GC:GC类型,还有个full GC
PSYoungGen:年轻代 Prallell Scavenge(年轻代收集器、并行收集器,复制算法)
123909K->23017K(125952K):当前年轻代的大小->gc后年轻代的大小(年轻代总分配的空间)
170172K->74234K(427008K):堆内存->gc后堆内存
0.0516005 secs:gc发生时间

然后下面是Full GC的日志

2017-07-19T21:40:33.157+0800: 11.226: [Full GC (Metadata GC Threshold) [PSYoungGen: 10730K->0K(112128K)] [ParOldGen: 52811K->46254K(301056K)] 63541K->46254K(413184K), [Metaspace: 53972K->53972K(1099776K)], 0.3041220 secs] [Times: user=0.61 sys=0.00, real=0.30 secs]

里面包括年轻代、年老代和永久代的gc内存情况

从上面的gc可以看出,一次启动eclipse差不多GC或Full GC10次,其实我们可以做优化,年轻代一直gc的原因是分配的年轻代内存小,所以每次用完就gc,又申请内存,导致内存越来越多,所以如果分配内存多,会减少gc的次数,下面来配置年轻代和永久代(参数多次调才达到最优状态)

-Xms256m
-Xmx1024m
-XX:NewSize=400m
-XX:MaxNewSize=400m
-XX:PermSize=90m
-XX:MaxPermSize=90

gc次数有明显的减少,从10次下降到6次
JVM性能调优-小测试
JVM性能调优-小测试