1.需要解决的问题
A.idea启动时间很长,大于1分钟;
B.idea启动非常占用cpu,超过80%(电脑cpu比较旧);
2.准备工作
2.1 idea启动初始配置
A.配置文件
IntelliJ IDEA\bin\idea64.exe.vmoptions
B.配置信息
//**jvm堆初始内存
-Xms128m
//**jvm堆最大可用内存
-Xmx750m
//**保留代码占用的内存容量
-XX:ReservedCodeCacheSize=240m
//**老年代使用CMS垃圾收集器
-XX:+UseConcMarkSweepGC
//**每兆堆空闲空间中SoftReference的存活时间
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
//**JVM会在遇到OutOfMemoryError时生成“堆转储快照”
-XX:+HeapDumpOnOutOfMemoryError
//**禁用server模式下jvm检测到程序在重复抛一个异常时屏蔽该异常的功能
-XX:-OmitStackTraceInFastThrow
2.2 idea启动时间计算插件
idea插件文档太少,基本找不到,不会编写,粗略计算:
A.启用时间:9:35 05,结束:9:36 07, 耗时63秒
B.cpu占用:最大值超过96%,造成pc非常卡,但是gc占用cpu非常低
3.分析
3.1 数据分析
A.启动时间平均约60秒(1分钟);
B.垃圾收集总耗时:2.584秒
Full GC:18次,0.770秒;
Minor GC:108次,1.814秒;
C.加载类39889个,52秒;
D.JIT编译:编译类23737个,17秒;
E.JVM堆内存:总:750M,新生代:166M(Eden:133M,两个Survivor:各16.625M)
3.2 问题分析
A.Compile Time和ClassLoad Time非常之高;
B.GC Time比较小;
C.CPU占用率最大值超过96%,造成pc非常卡,但是gc占用cpu非常低,为idea占用。
4.优化
4.1 升级JDK版本
A.原因:每次JDK版本升级JVM速度都会有一定的提升
B.结论:本机JDK版本JDk1.8_144,为最新版本
4.2 加载时间
A.原因:加载类39889个,52秒。加载类很多,时间最长。禁用字节码验证过程耗时可以优化:
-Xverify:none
B.结论:ClassLoad Time从52秒减少到44秒,
未明显解决。
4.3 编译时间
A.说明:JDK32位有server和client两种模式,64位只有server模式:
client:对GUI优化,启动速度快,运行速度稍慢,使用一个代号为C1的轻量级编译器;
server:对生产环境优化,运行速度快,启动速度稍慢,使用一个代号为C2相对重量级的编 译器能提供更多的优化措施。
B.原因:JIT编译:编译类23737个,17秒。
C.结论:
未解决。
4.4 垃圾回收时间
A.原因:Minor GC:108次,1.814秒;Full GC:18次,0.770秒,回收时间占用启动时间比例很小,次数稍多,优化意义不大。增加堆内存的初始值,增加新生代内存的初始值和最大值。
-Xms750m -Xmx750m -Xmn200m
B.结论:优化后,Minor GC:44次,1.514秒;Full GC:5次,0.640秒。
意义不大。
4.5 cpu占用率
A.原因:CPU占用率最大值超过96%,造成pc非常卡,但是gc占用cpu非常低,为idea占用,cpu抽样结果如下图,但是占用cpu的方法均为idea内部的方法,无法进行跟踪;
B.结论:
未解决。
5.idea最后的配置
//**jvm堆初始内存
-Xms750m
//**jvm堆最大内存
-Xmx750m
//**jvm新生代内存初始值和最大值均为200M
-Xmn200m
//**保留代码占用的内存容量
-XX:ReservedCodeCacheSize=240m
//**老年代使用CMS垃圾收集器
-XX:+UseConcMarkSweepGC
//**每兆堆空闲空间中SoftReference的存活时间
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
//**JVM会在遇到OutOfMemoryError时生成“堆转储快照”
-XX:+HeapDumpOnOutOfMemoryError
//**禁用server模式下jvm检测到程序在重复抛一个异常时屏蔽该异常的功能
-XX:-OmitStackTraceInFastThrow
//**禁用字节码验证
-Xverify:none
//**打印GC停顿时间
-XX:+PrintGCTimeStamps
//**打印GC明细
-XX:+PrintGCDetails
//**到日志存放文件
-Xloggc:d:\idea_gc.log
6.结论
未明显解决启用时间过长和cpu占用过高的问题,后续将持续跟进。