一、前言
吃瓜群众陈达,有一台2核心8G内存的13寸Macbook Pro,工作中长时间使用IDEA,略感卡顿,所以稍微对IDEA底下的JVM做了些优化。
效果:
a) 『Reimport All Maven Projects』不再长时间卡死
b) 日常运行时,不再偶尔出现『神秘卡死』的状况。
二、JVM参数
打开IDEA后,点击『Help』,选择『Edit Custom VM Options』,填入以下参数配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| # custom IntelliJ IDEA VM options
#
# IDEA的JVM以Server模式启动(新生代默认使用ParNew) -server
#
# 堆初始值占用3G,意味着IDEA启动即分配3G内存 -Xms3g
# 堆最大值占用3G -Xmx3g
# 强制JVM在启动时申请到足够的堆内存(否则IDEA启动时堆初始大小不足3g) -XX:+AlwaysPreTouch
# 年轻代与老年代比例为1:3(默认值是1:4),降低年轻代的回收频率 -XX:NewRatio=3
# 栈帧大小为16m -Xss16m
#
# 使用CMS老年代回收器 -XX:+UseConcMarkSweepGC
# CMS的重新标记步骤:多线程一起执行 -XX:+CMSParallelRemarkEnabled
# CMS的并发标记步骤:启用4个线程并发标记(理论上越多越好,前提是CPU核心足够多) -XX:ConcGCThreads=4
#
# 代码缓存,用于存放Just In Time编译后的本地代码,如果塞满,JVM将只解释执行,不再编译native代码。 -XX:ReservedCodeCacheSize=512m
# 分层编译,JIT编译优化越来越好,IDEA运行时间越久越快 -XX:+TieredCompilation
# 节省64位指针占用的空间,代价是JVM额外开销 -XX:+UseCompressedOops
# 增大软引用在JVM中的存活时长(堆空闲空间越大越久) -XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
|
三、吃瓜群众
上面的JVM参数仅适用于陈达个人的机器配置和JAVA项目情况,若您要给自己量身订做一套,需要自行观察JVM运行情况。
首先找出IDEA所在的JVM进程,使用top命令一般能找到IDEA的PID,若找不到,可使用以下命令:
然后监控JVM的内存情况(将37975替换成上一步骤找到的PID):
1
| jstat -gcutil 37975 1000
|
稍微留意内存的变化和回收,修改JVM参数即可。