您的位置:首页 > 其它

6.调优实战-优化idea启动速度

2017-10-09 18:22 1006 查看
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占用过高的问题,后续将持续跟进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: