IntelliJIDEA性能优化的教程详解
idea打开的多了内存占⽤也就多了下边是亲试的优化ide性能的⽅法
1.设置JVM的启动参数:
进⼊idea的安装⽬录的bin⽂件夹
打开 vmoptions ⽂件,修改-Xmx 的值为2048m
打开 vmoptions ⽂件,修改-Xmx 的值为2048m
打开idea.properties⽂件,到idea.max.intellisense.filesize,默认是2500,改为25000(数值仅供参考,具体数值根据⾃⼰⽂件⼤⼩来定) 参数作⽤:
-Xms1024m 设置初时的内存⼤⼩,提⾼Java程序的启动速度
-Xmx2048m 设置最⼤内存数,提⾼该值,可以减少内存Garage收集的频率,提⾼程序性能
-XX:ReservedCodeCacheSize=480m设置代码内存容量
-XX:+UseParNewGC 使⽤并⾏收集算法
-server 控制内存garage⽅式,这样你⽆需在花⼀到两分钟等待内存garage的收集
2.菜单配置设置JVM的启动参数:通过Help - Edit Custom 菜单设置配置,IntelliJ会优先使⽤这个地⽅的配置⽂件
3.关闭代码检查:
IntelliJ的代码检测功能⾮常强⼤,但也占⽤了⼀些资源,可以将默认的除 Error之外的其他级别的检测都去掉
4.清空缓存并重建索引:
将编译进程和Maven的堆值设置⼤⼀些
ps:下⾯看下IntelliJ IDEA 更新后,电脑卡成球,该如何优化?
在和同事的⼀次讨论中发现,对 IntelliJ IDEA 内存采⽤不同的设置⽅案,会对 IDE 的速度和响应能⼒产
⽣不同的影响。
Don't be a Scrooge and give your IDE some more memory
不要做守财奴,给IDE多留点内存吧。
昨天,⼤家就是否⾃定义IntelliJ IDEA 的内存设置进⾏了讨论,有些⼈选择默认设置,有些⼈会对默认的设置进⾏简单的变更,还有⼀些开发者会基于他们的需求进⾏全⾯复杂的设置。笔者⽬前的⼯作是处理⼏个微服务项⽬和⼀个⽼项⽬,⽽客户的核⼼业务需求⾮常⼤。对 IntelliJ IDEA 内存进⾏简单设置以后,笔者明显感受到了该 IDE 在速度和响应⽅⾯的改善。但当时笔者并未进⾏具体的测量,所以这只是主观感受⽽已。
git使用详解不过,参与讨论的⼀位开发者给笔者发了⼀份他的设置,虽然是针对同个项⽬,该设置却极其复杂。笔者对⾃⼰的设置并⽆不满,但⾮常好奇,这些完全不同的设置对⽐JetBrains 提供的默认设置,会有怎样的不同。
⽬标
笔者的计划是,在⼀个接近⽇常开发项⽬的场景下(加载⼀个⼤项⽬、加载2、3个微服务、git pull 后刷新⼤项⽬),测试各个设置带来的效果,并选出内存消耗和速度都达到最优时的最佳设置。
测试机器和项⽬
笔记本电脑:MacBook Pro Retina, 2.3GHz Intel Core i7, 16GB 1600Mhz DDR3,SSD Disc, OS X Yose
mite
项⽬
⼤项⽬—— Monolith ,70万⾏代码( Java[1] 8 和 Groovy ),303个Gradle模块
两个微服务——约有10000——20000⾏代码( Java 8 和 Groovy )的⼩项⽬,各有⼀个Gradle模块
测试场景
1. 在 Idea 中关闭所有项⽬
2. 基于测试⽂件 idea.vmoptions 进⾏设置
3. 重启电脑
4. 启动后关闭所有不相关的项⽬( communicators 等等)
5. 打开 Idea(测试时间)
6. 打开⼤项⽬(测试时间)
7. 检查 jstat -gcutil
8. 打开两个微服务项⽬(测试时间)
9. 检查 jstat -gcutil
10. 返回⼤项⽬然后点击“刷新 Gradle 项⽬”按钮(测试时间)
11. 检查 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.preferIPv4Stack=true
-ableSNIExtension=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 中打开并且对⽐他们所消耗的时间。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论