实验环境:
Windows 10
JVM: Java HotSpot(TM) 64-Bit Server VM (24.79-b02, mixed mode)
Java: 版本 1.7.0_79
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
类加载, 卸载信息
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 的类加载速度
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 秒多
二. 调整内存, 控制 GC 频率
监视 eclipse 堆 ( Heap ), 永久代 ( PermGen ), 以及 GC 信息
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
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