深入理解JVM虚拟机——5. 调优实战——idea调优

书上给了一个Eclipse 的调优例子,最后调优将启动时间降了一倍左右,但是自己用的是idea,所以就想模仿例子将自己的idea也进行调优,而idea启动是很慢的,所以调优一下也是很有必要。

调优前

idea版本信息

IntelliJ IDEA 2018.1.5
JRE: 1.8.0_152-release-1136-b39 amd64
JVM: OpenJDK 64-Bit Server VM By JetBrains s.r.o
Windows 10 10.0

程序状态参数,打开bin目录下的idea.exe.vmoptions文件可以看到相关参数

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow

可以看到初始堆内存是128m,最大堆内存是750m。
在默认配置下,并且启动时默认打开一个小型网站的项目,我的电脑启动idea的时间大概是28s,下面是idea启动完成后的Visualvm的截图。
image
JIT编译的时间和类加载时间超过了启动的时间,这个是为什么我也不知道,希望后续看书可以理解。
那我们就按照这个Viusalvm进行计算

Compile Time 编译了15558个文件耗时58.461s
Class Loader Time 加载了42853个类,用时27.133s
Eden Space 年轻代Eden区使用31.585M,发生了77次MinorGC用时580.704ms
Servivorfrom区使用0m
Survivorto区用使用1.41m也就是1.41m的对象进入老年代
Old Gen 老年代使用了144.427M发生了10次FullGC用时253.713ms

我们首先对收集垃圾时间进行优化,也就是降低次数。

垃圾收集调优

可以看到MinorGC发生了77次,最耗时间的FullGC发生了10次,我们都知道GC是由于堆内存满了以后发生的,所以我们先把堆内存整体调大,初始设为1024m,最大设为2048m

-Xms1024m
-Xmx2048m

image
可以看到MinorGC只发生了4次,而FullGC发生了5次,4次MinorGC已经足以让我们接受,但是老年代有足足1.35个G的大小,不应该会发生GC,查看监视发现metaspace区(JDK1.8之前是perm区)内存不够进行扩容时导致的,所以我们直接把初始大小设置为2048m并且metaspace设为512m应该就能够避免FfullGC

-Xms2048m

image
可以看到FullGC已经完全没有了。

字节码验证

idea使用者很多,它的编译代码我们可以认为是可靠的,不需要在加载的时候再进行字节码验证,因此通过参数-Xverify:none禁止掉字节码验证过程也可 作为一项优化措施

-Xverify:none

image
这是优化完成后的图,而最后idea的启动时间大概在20s左右,降低了8s,成功进行优化。

猜你喜欢

转载自blog.csdn.net/MoForest/article/details/85067483