實驗環境: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