「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?( 二 )


测试设置 笔者设置了四种不同的设置 , 为了好记 , 给它们起了不同的名字 。
默认(灰色标识) JetBrains 提供的默认设置:
【「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?】-Xms128m-Xmx750m-XX:MaxPermSize=350m-XX:ReservedCodeCacheSize=240m-XX:+UseCompressedOops Big(大)(红色标识) 给 Xmx 配 4096MB ,ReservedCodeCacheSize 设置 1024MB , 这已经是相当多的内存了:
-Xms1024m-Xmx4096m-XX:ReservedCodeCacheSize=1024m-XX:+UseCompressedOops Balanced(平衡的)(蓝色标识) Xmx 和 Xms 都分配 2GB, 这是相当平衡的内存消耗:
-Xms2g-Xmx2g-XX:ReservedCodeCacheSize=1024m-XX:+UseCompressedOops Sophisticated(复杂的)(橘色标识) 和上面一样 ,Xmx 和 Xms 都分配2GB , 但是给 GC 和内存管理指定不同的垃圾回收器和许多不同的标志:
-server-Xms2g-Xmx2g-XX:NewRatio=3-Xss16m-XX:+UseConcMarkSweepGC-XX:+CMSParallelRemarkEnabled-XX:ConcGCThreads=4-XX:ReservedCodeCacheSize=240m-XX:+AlwaysPreTouch-XX:+TieredCompilation-XX:+UseCompressedOops-XX:SoftRefLRUPolicyMSPerMB=50-Dsun.io.useCanonCaches=false-Djava.net.preferIPv4Stack=true-Djsse.enableSNIExtension=false-ea 以上便是笔者的测试设置 , 为了执行该测试用例 , 还需要在~/Library/Preferences/IntelliJIdea15/下创建一个idea.vmoptions文件(这是 Mac OS 系统下的路径设置 , 基于你的操作系统进行设置 , 关注公众号:Java面试那些事儿 , 回复关键字idea , 获取最新的idea教程)
现在 , 执行测试用例并比较结果 。
结果 Idea启动时间
「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?
本文插图
正如上图所示 , 启动时间并不依赖于内存设置 。 Idea 在所有场景下的测试时间都是10秒 , 无论内存分配有多少 。 这并不足为奇 , 因为在此早期阶段 , 这些设置并不会影响到应用的行为 。 更多IDEA内容:IntelliJ IDEA 2020.1 昨晚已正式发布 , 太贴心啦...
加载大项目花费的时间 现在加载 Monolith 项目及其70万行代码 。 终于 , 出现了一些的差异 。 默认设置所花费的时间几乎是其它的3倍 。 很明显 , 如此庞大的代码库需要更多的内存 。 如果我们执行:
jstat -gcutil 会发现 , 对比其它设置 ,GC 在默认设置下会变得异常忙碌 。

「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?
本文插图
「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?
本文插图
不仅 GC 释放内存的总时间非常高(几乎达到了50倍) , 而且 Full GC 的平均执行时间也非常非常长 。 大量的时间都花在了 Full GC 上面 , 这是 IDE 响应速度低的主要原因 。
在IDEA中打开两个微服务 现在加载这两个微服务项目 , 在 IDEA 中打开并且对比他们所消耗的时间 。

「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?
本文插图
在这个测试用例下 , 差异还是非常明显的 , 复杂设置表现最佳 , 而默认设置仍旧输给了其他两种设置 。
再次使用jstat –gcutil 加载完两个微服务项目后 , 再检查一下同时打开3个项目的情况下 ,GC 的表现情况 。 经测试发现 , 3个不同的自定义设置表现几乎差不多 , 而默认设置简直弱爆了 。
「IntelliJ IDEA」一打开IntelliJ IDEA,电脑卡的要死,该如何优化内存呢?