您的位置:首页 > 其它

【jvm实战】IDEA运行速度调优

2017-11-15 17:32 330 查看

1.个人电脑配置

CPU:Intel Core i7-7700HQ 2.80GHz
RAM:16.0G
OS:windows10 64位

2.IDEA启动速度优化

打开ides安装目录里的bin文件夹,打开idea.exe.vmoptions(64位的叫idea64.exe.vmoptions)看到的是idea安装完成后默认的VM参数配置(其实里面还有一些其他的配置,最好不要动它们):

-Xms128m

-Xmx512m

-XX:ReservedCodeCacheSize=240m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-XX:+HeapDumpOnOutOfMemoryError

-XX:-OmitStackTraceInFastThrow

这个配置下,idea的启动时间大概是20s,下面是启动完成时VisualVM里的截图:



可以看到:发生Minor GC 103次,共719.084ms,Major GC 14次,共442.858ms,个人觉得默认配置下已经运行的比较流畅了。

顺便提一下,可用以下命令来输出一个名为gclog.log的gc日志来查看各种GC的详细信息

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-Xloggc:gclog.log

继续,我们可以尝试一下把堆内存降低一下:

-Xms128m

-Xmx256m

-XX:ReservedCodeCacheSize=240m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-XX:+HeapDumpOnOutOfMemoryError

-XX:-OmitStackTraceInFastThrow

这次idea的启动时间大概是21s,启动完成时VisualVM里的截图:



可以看到执行Major GC 41次,一共3.4秒,这就是老年代内存不足导致频繁执行FULL GC的结果.

最后看看我调大堆内存的运行结果,配置如下:

-Xms1024m

-Xmx2048m
-XX:ReservedCodeCacheSize=240m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-XX:+HeapDumpOnOutOfMemoryError

-XX:-OmitStackTraceInFastThrow

启动时间19s,结果:



这次的运行结果是最理想的Minor GC和Major GC的次数都降下来了.

老年代扩容的时候也会导致FULL GC,我把最小堆调到与最大堆一样,另外idea运行时可能会时不时执行一下System,gc()来进行FULL GC,通过-XX:+DisableExplicitGC来禁止此操作。最后我发现无论堆内存设成多大,FULL GC还是会有那么几次,个人猜测是metaspace区(JDK1.8之前是perm区)内存不够进行扩容时导致的,于是把metaspace的初始值调成512m:

-Xms2048m

-Xmx2048m
-XX:+DisableExplicitGC
-XX:MetaspaceSize=512m

-XX:ReservedCodeCacheSize=240m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-XX:+HeapDumpOnOutOfMemoryError

-XX:-OmitStackTraceInFastThrow

运行结果启动用了18.8s



可以看到Full GC的次数在启动完成时是0了

继续优化,IDEA使用者较多,它的编译代码我们可以认为是可靠的,不需要在加载的时候再进行字节码验证,用-Xverify:none参数可以禁止掉字节码验证:

-Xms2048m

-Xmx2048m
-Xverify:none
-XX:+DisableExplicitGC

-XX:MetaspaceSize=512m

-XX:ReservedCodeCacheSize=240m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-XX:+HeapDumpOnOutOfMemoryError

-XX:-OmitStackTraceInFastThrow

运行结果启动用了17.6s

修改前的类加载时间为38.41s



修改后为31.70s



3.IDEA运行期间优化

IDEA默认给我们配置了GC收集器是并行的CMS(-XX:+UseConcMarkSweepGC这个参数可以看出),它默认搭配的新生代收集器是ParNew(-XX:+UseParNewGC),由于我个人电脑CPU还是挺强力的,而且开发时也不会打开太多其他乱七八糟的应用,所以按默认配置就可以了,如果CPU配置比较低,而且CPU占用率大的用户,可以考虑改用串行的GC收集器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: