IntelliJ IDEA 更新后,电脑卡成球,该如何优化?
点击上方“方志朋”,选择“设为星标”
回复”666“获取新整理的面试文章
来源 | https://urlify.cn/NBBbam
在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。
Don’t be a Scrooge and give your IDE some more memory
不要做守财奴,给IDE多留点内存吧。
昨天,大家就是否自定义IntelliJ IDEA 的内存设置进行了讨论,有些人选择默认设置,有些人会对默认的设置进行简单的变更,还有一些开发者会基于他们的需求进行全面复杂的设置。笔者目前的工作是处理几个微服务项目和一个老项目,而客户的核心业务需求非常大。对 IntelliJ IDEA 内存进行简单设置以后,笔者明显感受到了该 IDE 在速度和响应方面的改善。但当时笔者并未进行具体的测量,所以这只是主观感受而已。
不过,参与讨论的一位开发者给笔者发了一份他的设置,虽然是针对同个项目,该设置却极其复杂。笔者对自己的设置并无不满,但非常好奇,这些完全不同的设置对比 JetBrains 提供的默认设置,会有怎样的不同。
目标
笔者的计划是,在一个接近日常开发项目的场景下(加载一个大项目、加载2、3个微服务、git pull 后刷新大项目),测试各个设置带来的效果,并选出内存消耗和速度都达到最优时的最佳设置。
测试机器和项目
笔记本电脑:MacBook Pro Retina, 2.3GHz Intel Core i7, 16GB 1600Mhz DDR3,SSD Disc, OS X Yosemite
项目
大项目—— Monolith ,70万行代码( Java[1] 8 和 Groovy ),303个Gradle模块
两个微服务——约有10000——20000行代码( Java 8 和 Groovy )的小项目,各有一个Gradle模块
测试场景
在 Idea 中关闭所有项目
基于测试文件 idea.vmoptions 进行设置
重启电脑
启动后关闭所有不相关的项目( communicators 等等)
打开 Idea(测试时间)
打开大项目(测试时间)
检查 jstat -gcutil
打开两个微服务项目(测试时间)
检查 jstat -gcutil
返回大项目然后点击“刷新 Gradle 项目”按钮(测试时间)
检查 jstat -gcutil
jstat -gcutil
jstat 是 JDK 自带的工具,主要利用 JVM 内建的指令对 Java 应用程序的资源和性能进行实时的命令行监控,还包括对 Heap size 和垃圾回收状况的监控。它有许多选项来收集各种数据,但这里只会用到:
-gcutil :
-gcutil - Summary of garbage collection statistics.
S0: Survivor space 0 utilization as a percentage of the space's current capacity.
S1: Survivor space 1 utilization as a percentage of the space's current capacity.
E: Eden space utilization as a percentage of the space's current capacity.
O: Old space utilization as a percentage of the space's current capacity.
M: Metaspace utilization as a percentage of the space's current capacity.
CCS: Compressed class space utilization as a percentage.
YGC: Number of young generation GC events.
YGCT: Young generation garbage collection time.
FGC: Number of full GC events.
FGCT: Full garbage collection time.
GCT: Total garbage collection time.
这个命令的输出结果如下:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159
在本文中,最重要的参数是 GC 事件( YGC 和 FGC )次数和收集时间( YGCT 和 FGCT )。
测试设置
笔者设置了四种不同的设置,为了好记,给它们起了不同的名字。
默认(灰色标识)
JetBrains 提供的默认设置:
-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 系统下的路径设置,基于你的操作系统进行设置)
现在,执行测试用例并比较结果。
结果
Idea启动时间
正如上图所示,启动时间并不依赖于内存设置。Idea 在所有场景下的测试时间都是10秒,无论内存分配有多少。这并不足为奇,因为在此早期阶段,这些设置并不会影响到应用的行为。
加载大项目花费的时间
现在加载 Monolith 项目及其70万行代码。终于,出现了一些的差异。默认设置所花费的时间几乎是其它的3倍。很明显,如此庞大的代码库需要更多的内存。如果我们执行:
jstat -gcutil <IDEA_PID>
会发现,对比其它设置, GC 在默认设置下会变得异常忙碌。
不仅 GC 释放内存的总时间非常高(几乎达到了50倍),而且 Full GC 的平均执行时间也非常非常长。大量的时间都花在了 Full GC 上面,这是 IDE 响应速度低的主要原因。
在IDEA中打开两个微服务
现在加载这两个微服务项目,在 IDEA 中打开并且对比他们所消耗的时间。
在这个测试用例下,差异还是非常明显的,复杂设置表现最佳,而默认设置仍旧输给了其他两种设置。
再次使用jstat –gcutil
加载完两个微服务项目后,来检查一下同时打开3个项目的情况下, GC 的表现情况。经测试发现,3个不同的自定义设置表现几乎差不多,而默认设置简直弱爆了。
最后的角逐:重新加载Monolith
现在,笔者需要从仓库中获得 Monolith 项目的最新版本,并且刷新 Gradle 模块,这样, IDEA 能看到所有的新类。
重要提示:代表默认设置的灰色条形柱非常高,因为 IDEA 在刷新过程中崩溃了,笔者无法测量实际时间。显然,默认分配的内存不足以执行该操作。
但从三个自定义例子中可以发现,大内存配置花费的时间是最短的。所以,内存分配还是起到了作用。
最后一次使用jstat-gcutil
因为 IDEA 在默认设置下无法刷新项目,所以,这次测试默认设置就不包括在里面。
从上图可以看出,三者之间的差异不大,但是 Big 配置下的 Full GC 执行时间最快。此外, Xmx 内存大些对响应能力提升的帮助非常明显。
总结
在这次简短的实验中,大家可以发现,即使对 IntelliJ IDEA 内存进行微调,都可以大大提升 IDE 性能。当然,内存分配越多,执行效果就越好。但是,你也会发现, IDE 之外许多其他应用程序也需要消耗内存,所以,大家的目标应该是在提高性能和内存消耗之间找到一个平衡。笔者认为,在大多数情况下,把 Xmx 值设置在 2G 和 3G 之间是最佳的。如果你有更多的时间可以用 jstat 和 jvisualm 检查用不同的 JVM 设置如何影响性能和内存占用。
讨论
你的 idea.vmoptions 是如何配置的呢?你还有其它提高 InteliJ IDEA 性能的方法吗?不妨一起讨论讨论吧。
热门内容:Lambda表达式入门,看这篇就够了!实现扫码登陆的最简单方案与原理阿里巴巴为什么不用 ZooKeeper 做服务发现?我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・
IntelliJ IDEA 更新后,电脑卡成球,该如何优化?相关推荐
- w10计算机运行特别卡,win10更新后很卡怎么办_win10更新后电脑特别卡的解决方法...
最近有朋友问小编win10更新后很卡怎么办,对于这个问题,相信很多朋友都遇到过.Win10系统是目前市面上主流的操作系统,很多朋友都要在使用windows10系统,但是有些朋友在更新完win10后发现 ...
- 检查计算机更新在哪里,有效解决升级Win10系统后电脑卡在正在检查更新的情况...
我们在win10系统电脑的使用中,很多的时候系统升级都是直接自动完成的,今天看到有小伙伴的win10系统电脑升级的时候出现了问题,我们在升级中升级Win10系统后电脑卡在正在检查更新的情况,在这个问题 ...
- 电脑卡顿打字卡顿:开启PLSQL Developer后电脑卡顿打字卡顿
安装Oracle和PLSQL Developer后发现电脑打字特别特别特别的卡,后来发现只有打开PLSQL Developer后电脑才会卡顿,而且只有打字的时候才会卡. 原因是: win10中 pls ...
- 电脑技巧:电脑卡顿的4个优化小技巧,太有用了!
电脑经常卡顿,就会严重影响了大家的工作效率,其实你的电脑可以开启"加速"优化设置来提升电脑的性能,今天小编就来给大家分享四个能减少电脑卡顿的实用小技巧,让电脑焕然一新,还不赶紧来试 ...
- IntelliJ IDEA 卡成球了?
在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响. Don't be a Scrooge and give your ID ...
- linux电脑开机进不了系统更新失败,电脑卡在配置Windows Update失败界面无法开机怎么办...
在电脑系统中,默认开启了自动进行系统更新的功能,而一般会在开关机的时候进行系统更新配置.有用户在进行系统更新中途关机或其他原因突然中断进程,造成电脑一直卡在"配置Windows Update ...
- 计算机一打开就卡在更新失败,电脑卡在配置Windows Update失败界面怎么解决
在 电脑系统 中,默认开启了自动进行系统更新的功能,而一般会在开关机的时候进行系统更新配置.有用户在进行系统更新中途关机或其他原因突然中断进程,造成电脑一直卡在"配置Windows Upda ...
- 关于window 10 更新后电脑没声音的解决方案(图文并茂)
1. 本来以为是驱动的问题,谁知道不是(如果你的是驱动问题的话, 建议下载驱动人生,然后进行驱动体检,缺少声卡驱动了就下载安装/或者进行更新). 2. 按照下面的步骤进行设置: 点击电脑任务栏的喇叭图 ...
- 免费解决Android studio 3.0更新后搜狗输入法卡顿问题
免费.轻松.舒服.完美 个人经历,我也遇到了非常恶心的问题,一查CSDN,有替换jre.升级java版本.搜狗输入法智慧版.bing输入法.谷歌输入法,有些下载还需要币的,需要币的竟然还有失败案例,没 ...
最新文章
- mysql半备份_MySQL半同步复制与增强半同步复制详解及安装
- 2.11 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 剑指offer38 数字在排序数组中出现的次数
- 抗衰老,吃这些食物越来越年轻
- 20-400-040-高可用-Flink集群的高可用搭建
- 以太坊2.0合约余额新增13536 ETH
- 学后端,一步一坑,遇坑就跳,跳完再爬---之mysql与mysql可视化工具
- php用户名框架,ThinkPHP框架结合Ajax实现用户名校验功能示例
- windows7环境下 硬盘安装ubuntu 12.04 server版
- openv学习—Template Matching
- Python少儿编程入门篇(1)基本数据类型
- 5月全国程序员工资最新统计,网友:惊呆了!
- WPS安装后显示系统字体找不到
- 计算机重装后不能启动怎么办,重装系统后无法进入系统怎么办 修复进不去系统方法教程...
- Dart | 使用 Flutter 制作一个像 SIRI 那样的语音机器人
- 题目: 打印输出上下左右对称的,第一行一颗星,第二行三颗星,第三行五颗星,第四行七颗星,第五行五颗星,第六行三颗星,第七行一颗星
- android短信拦截与发送,有效拦截苹果iMessage垃圾短信的几个方法
- django项目中涉及到的一些常用sql语句学习整理
- 怎么隐藏响应头中的server和X-Powered-By?
- 流媒体开发中H264编码NALU结构介绍与I帧判断方法