首頁 > 軟體

最新IDEA 2022基於JVM極致優化 IDEA啟動速度的方法

2022-08-05 18:00:29

IDEA 2022最新版基於 JVM極致優化 IDEA 啟動速度

1. 引言

相信做 Java 開發的同學,對 IDEA 這個工具應該都不陌生,即使不使用 IDEA 做開發,那麼對 Eclipse 這個工具應該也不會陌生,如果這兩個都不用的同學,我就想弱弱問一句,您不會是在使用記事本吧?

上面除了那個記事本,我相信所有的同學都對 IDEA 或者說 Eclipse 這兩個工具的開啟速度深有印象吧。

只要你沒自己改過啟動引數,不管電腦多高的設定,我相信這個開啟速度應該都快不到哪去。

前面寫了這麼多篇的 JVM 相關內容,今天我嘗試優化一下 IDEA 的啟動速度(手頭沒有 Eclipse ),這算是小試牛刀,希望最後不要翻車。

2. 開始

我使用的是 JDK 自帶的 VisualVM 視覺化工具,主要使用的是它的那個 GC 外掛。

首先第一次開啟 IDEA ,載入時長按照 IDEA 所有元件載入完成進行人工卡點(本來想找個外掛的,結果 IDEA 這方面的外掛還真沒找到)。

IDEA 在開啟的過程中,右下角會有一個進度條在一直讀條,我就大約等那個條讀完了進行計時。

後續操作的過程中發現其實完全沒必要,因為差距簡直太明顯了。

首先在預設設定的情況下第一次開啟 IDEA ,然後看下 VisualVM 的資料圖:

GC 情況:

概覽情況:

我直接被這個 Class Loader 載入速度驚呆了,活活消耗了 3m 34s 的時間,由於其他操作都是並行的,這一項的耗時直接撐破天了。

不過同時可以看到 GC 的消耗,好像並不是很大, Minor GC 發生了 147 次,但是 Full GC 一次都沒有發生過,共計耗時 712ms 。

但是看到下面的概覽圖還是能發現一些端倪的,就比如當前堆大小在一直不停的擴容。

先找到 IDEA 的組態檔,看下預設設定,我原生的路徑是 D:Program FilesJetBrainsappsIDEA-Uch-0 ,這個路徑每個人都不一樣,大家自己找自己的,找到以後開啟 idea64.exe.vmoptions 這個檔案:

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true

可以看到最小堆是設定 128MB ,而最大堆是 750MB ,使用的是 CMS 收集器,我使用的電腦硬體記憶體是 16GB ,這麼大的記憶體空間,果斷直接把最小堆改成 1G ,最大堆改成 2G ,關掉 IDEA 再重啟看下效果。

修改後的設定如下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50

GC 情況:

概覽情況:

可以看到,Class Loader 時長瞬間就下來了,從 3m 變成了 24s ,並且 Minor GC 的時長整整縮短了一半,從 712ms 下降到了 342ms ,次數也由之前的 147 次下降到了現在的 9 次,依然沒有 Full GC 產生(廢話,記憶體開了這麼大又填不滿)。

並且看概覽圖的時候可以看到,堆記憶體擴容只擴容了一次。

那麼還能不能再短點呢?看下整個圖,感覺 ClassLoader 還有空間嘛,我們還可以把載入時的驗證給關掉,使用 -Xverify:none ,這樣應該還能再降低一些載入的耗時。

修改後的設定如下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情況:

概覽情況:

果然,載入時長從之前的 24s 繼續下降到了 19s ,差不多減少了有 1/4 左右,還是卓有成效的。

接著我想如果直接把最小堆也設定成 2G ,那麼堆大小就無需擴容,會不會有更加正向的影響?

修改後的設定如下:

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情況:

概覽情況:

實際上並沒有什麼太大成效。

從概覽中可以看到,我當前版本的 IDEA 使用的是自帶的 JDK11 :

JDK11 中是有 G1 收集器的,我要麼開啟 G1 試一下:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

GC 情況:

概覽情況:

看起來好像 Minor GC 的耗時還略有上漲,並且 GC 的次數從 9 次變成了 19 次。

不過看到概覽圖發現了一個更神奇的事情,當使用 G1 的時候,整個使用堆大小竟然沒有突破 1G ,看來電腦記憶體不夠大的同學更加推薦使用 G1 回收器,雖然 GC 的耗時稍有增加,不過能減少記憶體的使用,而 G1 的 GC 機制又是大量並行的,這點根本無傷大雅。

最後我放一下我修改後的整體的設定:

 -Dide.no.platform.update=true
-Dtoolbox.notification.token=ZATtXMyB3ZsNhTvmYivkW7tYp5ZT4GlqKFIx3Bp4_Ik=
-Dtoolbox.notification.portFile=D:IDEAappsIDEA-Uch-0222.3345.118.vmoptions.port
-Didea.plugins.path=D:\IDEA\apps\IDEA-U\ch-0\222.3345.118.plugins

# 上面部分為最新版本IDEA 預設設定,保留即可,新增下面這些設定即可
-Xms6g
-Xmx8g
-XX:ReservedCodeCacheSize=2048m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-Dide.no.platform.update=true
-Djdk.attach.allowAttachSelf=true
-Dfile.encoding=UTF-8

當然,如果不用 IDEA 的同學,只要是用 Jetbrain 全家桶套件,例如寫 Python 最常用的 Pycharm ,同樣也可以按照本文的方式進行設定,我自己又給 Pycharm 修改了一下設定,啟動速度絕對大幅提升,肉眼可見的那種。

結語

到此這篇關於最新IDEA 2022基於JVM極致優化 IDEA啟動速度的文章就介紹到這了,更多相關idea200優化 IDEA啟動速度內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com