1. 程式人生 > >6.調優實戰-優化idea啟動速度

6.調優實戰-優化idea啟動速度

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佔用過高的問題,後續將持續跟進。