实验环境:java
Windows 10bash
JVM: Java HotSpot(TM) 64-Bit Server VM (24.79-b02, mixed mode)app
Java: 版本 1.7.0_79eclipse
eclipse-java-luna-SR2-win32-x86_64性能
eclipse.ini 的初始配置优化
-startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile -showsplash org.eclipse.platform # 永久代最大为 256m --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Dosgi.requiredJavaVersion=1.6 # 堆初始大小为 40m -Xms40m # 堆最大为 512m -Xmx512m
类加载, 卸载信息ui
jps -l 13444 sun.tools.jps.Jps 12736 # eclipse 的 pid jstat -class 12736 Loaded Bytes Unloaded Bytes Time 9541 20660.6 0 0.0 9.20
添加 -Xverify:none 参数, 取消字节码验证, 能够加快 eclipse 的类加载速度spa
jps -l 13508 sun.tools.jps.Jps 10788 # eclipse 的 pid jstat -class 10788 Loaded Bytes Unloaded Bytes Time 8514 18405.0 0 0.0 6.78
取消字节码验证后, eclipse 的类加载速度快了 2 秒多.net
监视 eclipse 堆 ( Heap ), 永久代 ( PermGen ), 以及 GC 信息code
jps -l 1508 sun.tools.jps.Jps 10788 # eclipse 的 pid jstat -class 10788 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 11.71 45.01 62.91 9 0.186 3 1.005 1.191
新生代 ( E, Eden ) 使用了 11.71% 的空间, 老年代 ( O, Old ) 使用了 45.01% 的空间,
两个 Survivor ( S0, S1 ) 都为空, 永久代 ( P, PermGen ) 使用了 62.91%;
新生代共发生 9 次 YGC ( YoungGC ), 用时 0.186 秒, 老年代共发生 3 次 FGC ( FullGC ), 用时1.005 秒, GC 总耗时 ( GCT ) 1.191 秒
FGC ( FullGC )大多数由老年代容量扩增致使.
为了不老年代容量扩增引发的 FGC 带来的性能浪费
能够把 -Xms 参数适当设大一些,
若是内存够大的话, 也能够把 -Xms 设置和 -Xmm 同样
避免永久代容量扩增带来的性能浪费
能够把 -XX:PermSize 参数适当设大一些
若是内存够大的话, 能够把 -XX:PermSize 设置和 -XX:MaxPermSize 同样
内存调整后的配置
-startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile -showsplash org.eclipse.platform --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Xverify:none -Dosgi.requiredJavaVersion=1.6 # 堆初始大小为 256m -Xms256m # 堆最大为 512m -Xmx512m # 永久代初始大小为 64m -XX:PermSize=64m # 永久代最大为 128m -XX:MaxPermSize=128m
监视 eclipse 堆 ( Heap ), 永久代 ( PermGen ), 以及 GC 信息
jstat -gcutil 13888 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 99.82 46.14 33.99 99.37 3 0.147 0 0.000 0.147
调整内存后, YGC 只有 3次, 0次 FGC, GC 总耗时 0.147秒
JDK1.8 中, 元空间 ( Metaspace ) 取代了 永久代 ( PermGen ), 不会出现永久代内存溢出OutOfMemoryError: PermGen space, Metaspace 容量只受可用的本地内存限制, 会在运行时根据须要动态调整
最终优化配置
-startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile -showsplash org.eclipse.platform --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Xverify:none -Dosgi.requiredJavaVersion=1.6 # 堆初始大小为 256m -Xms256m # 堆最大为 512m -Xmx512m # 永久代初始大小为 64m -XX:PermSize=64m # 永久代最大为 128m -XX:MaxPermSize=128m