前言:这段时间发现 IDEA 的 CPU 占用率猛涨,时不时就飙升到百分之7、80,使得敲代码的体验感十分不佳,在经过一番查找之后终于解决了问题,在此记录一下
我们先定位一下为什么IDEA的CPU占用率会变高。
额,好像陷入了僵局,于是我打开监控,查看是哪个部分的 CPU 占用率高
打开监控
监控内容
结果出乎我的意料,从上图可以看到,JIT(即时编辑)占了大头,这也解释了为什么每当我在修改新的代码文件的内容时 CPU 占用率飙升,因为 JIT Compiler 即时编译将 class 文件编译成本地机器代码占用了大量的 CPU 资源导致的卡顿,这下子问题找到了,该研究解决办法了。
知道了是 JIT 的锅之后,我们该思考怎么解决它,我在网上参考了一篇博客修改了 JVM 的配置,如下图:
JVM 配置信息
这里我参考了大佬对 JIT 部分的设置,不过大佬没有在博客说明这些参数的意思,我在这里说明一下:
# 堆栈设置
-Xms2048m
-Xmx4096m
-Xverify:none
-XX:+DisableExplicitGC
-XX:ReservedCodeCacheSize=720m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
# JIT 参数
# 设置用于编译的编译器线程数
-XX:CICompilerCount=2
# 开启分层编译
-XX:TieredStopAtLevel=1
# 控制最大数量嵌套调用内联
-XX:MaxInlineLevel=3
# 即时编译的东西(没弄懂...)
-XX:Tier4MinInvocationThreshold=100000
-XX:Tier4InvocationThreshold=110000
-XX:Tier4CompileThreshold=120000
-XX:CICompilerCount 默认情况下,server JVM的线程数设置为2,clientJVM的线程数设置为1,如果使用分层编译,则线程数将缩放为内核数
-XX:TieredStopAtLevel 开启分层编译
-XX:MaxInlineLevel 默认值为9,控制最大数量嵌套调用内联。
修改后的 CPU 占用率,如下图:
可以看到 IDEA的 CPU 占用率显著下降。
参考博客: