最新IDEA?2022基于JVM極致優(yōu)化?IDEA啟動(dòng)速度的方法
IDEA 2022最新版基于 JVM極致優(yōu)化 IDEA 啟動(dòng)速度
1. 引言
相信做 Java 開發(fā)的同學(xué),對(duì) IDEA 這個(gè)工具應(yīng)該都不陌生,即使不使用 IDEA 做開發(fā),那么對(duì) Eclipse 這個(gè)工具應(yīng)該也不會(huì)陌生,如果這兩個(gè)都不用的同學(xué),我就想弱弱問一句,您不會(huì)是在使用記事本吧?

上面除了那個(gè)記事本,我相信所有的同學(xué)都對(duì) IDEA 或者說 Eclipse 這兩個(gè)工具的打開速度深有印象吧。
只要你沒自己改過啟動(dòng)參數(shù),不管電腦多高的配置,我相信這個(gè)打開速度應(yīng)該都快不到哪去。
前面寫了這么多篇的 JVM 相關(guān)內(nèi)容,今天我嘗試優(yōu)化一下 IDEA 的啟動(dòng)速度(手頭沒有 Eclipse ),這算是小試牛刀,希望最后不要翻車。
2. 開始
我使用的是 JDK 自帶的 VisualVM 可視化工具,主要使用的是它的那個(gè) GC 插件。

首先第一次打開 IDEA ,加載時(shí)長按照 IDEA 所有組件加載完成進(jìn)行人工卡點(diǎn)(本來想找個(gè)插件的,結(jié)果 IDEA 這方面的插件還真沒找到)。
IDEA 在打開的過程中,右下角會(huì)有一個(gè)進(jìn)度條在一直讀條,我就大約等那個(gè)條讀完了進(jìn)行計(jì)時(shí)。
后續(xù)操作的過程中發(fā)現(xiàn)其實(shí)完全沒必要,因?yàn)椴罹嗪喼碧黠@了。
首先在默認(rèn)配置的情況下第一次打開 IDEA ,然后看下 VisualVM 的數(shù)據(jù)圖:
GC 情況:

概覽情況:

我直接被這個(gè) Class Loader 加載速度驚呆了,活活消耗了 3m 34s 的時(shí)間,由于其他操作都是并行的,這一項(xiàng)的耗時(shí)直接撐破天了。
不過同時(shí)可以看到 GC 的消耗,好像并不是很大, Minor GC 發(fā)生了 147 次,但是 Full GC 一次都沒有發(fā)生過,共計(jì)耗時(shí) 712ms 。
但是看到下面的概覽圖還是能發(fā)現(xiàn)一些端倪的,就比如當(dāng)前堆大小在一直不停的擴(kuò)容。
先找到 IDEA 的配置文件,看下默認(rèn)配置,我本地的路徑是 D:\Program Files\JetBrains\apps\IDEA-U\ch-0 ,這個(gè)路徑每個(gè)人都不一樣,大家自己找自己的,找到以后打開 idea64.exe.vmoptions 這個(gè)文件:
-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
可以看到最小堆是設(shè)置 128MB ,而最大堆是 750MB ,使用的是 CMS 收集器,我使用的電腦硬件內(nèi)存是 16GB ,這么大的內(nèi)存空間,果斷直接把最小堆改成 1G ,最大堆改成 2G ,關(guān)掉 IDEA 再重啟看下效果。
修改后的配置如下:
-Xms1g -Xmx2g -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50
GC 情況:

概覽情況:

可以看到,Class Loader 時(shí)長瞬間就下來了,從 3m 變成了 24s ,并且 Minor GC 的時(shí)長整整縮短了一半,從 712ms 下降到了 342ms ,次數(shù)也由之前的 147 次下降到了現(xiàn)在的 9 次,依然沒有 Full GC 產(chǎn)生(廢話,內(nèi)存開了這么大又填不滿)。
并且看概覽圖的時(shí)候可以看到,堆內(nèi)存擴(kuò)容只擴(kuò)容了一次。
那么還能不能再短點(diǎn)呢?看下整個(gè)圖,感覺 ClassLoader 還有空間嘛,我們還可以把加載時(shí)的驗(yàn)證給關(guān)掉,使用 -Xverify:none ,這樣應(yīng)該還能再降低一些加載的耗時(shí)。
修改后的配置如下:
-Xms1g -Xmx2g -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Xverify:none
GC 情況:
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-TbJhzwT7-1659670388731)(https://c1.lmlphp.com/user/master/2020/10/15/b70f015221dc66e421548ed45ae44ce0.jpg)]](http://img.jbzj.com/file_images/article/202208/2022080514272374.jpg)
概覽情況:

果然,加載時(shí)長從之前的 24s 繼續(xù)下降到了 19s ,差不多減少了有 1/4 左右,還是卓有成效的。
接著我想如果直接把最小堆也設(shè)置成 2G ,那么堆大小就無需擴(kuò)容,會(huì)不會(huì)有更加正向的影響?
修改后的配置如下:
-Xms2g -Xmx2g -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Xverify:none
GC 情況:
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-1o44sy8W-1659670388732)(https://c1.lmlphp.com/user/master/2020/10/15/d9d2d0aa8157c552c568e077c769c88f.jpg)]](http://img.jbzj.com/file_images/article/202208/2022080514272376.jpg)
概覽情況:
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-flkIWGKA-1659670388733)(https://c1.lmlphp.com/user/master/2020/10/15/0726bcc652721803625ce34f90346e4a.jpg)]](http://img.jbzj.com/file_images/article/202208/2022080514272477.jpg)
實(shí)際上并沒有什么太大成效。
從概覽中可以看到,我當(dāng)前版本的 IDEA 使用的是自帶的 JDK11 :

JDK11 中是有 G1 收集器的,我要么開啟 G1 試一下:
-Xms1g -Xmx2g -XX:ReservedCodeCacheSize=240m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=50 -Xverify:none
GC 情況:
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Mpjef1SR-1659670388733)(https://c1.lmlphp.com/user/master/2020/10/15/45124de759ef88e3050d9456c82abc14.jpg)]](http://img.jbzj.com/file_images/article/202208/2022080514272479.jpg)
概覽情況:

看起來好像 Minor GC 的耗時(shí)還略有上漲,并且 GC 的次數(shù)從 9 次變成了 19 次。
不過看到概覽圖發(fā)現(xiàn)了一個(gè)更神奇的事情,當(dāng)使用 G1 的時(shí)候,整個(gè)使用堆大小竟然沒有突破 1G ,看來電腦內(nèi)存不夠大的同學(xué)更加推薦使用 G1 回收器,雖然 GC 的耗時(shí)稍有增加,不過能減少內(nèi)存的使用,而 G1 的 GC 機(jī)制又是大量并行的,這點(diǎn)根本無傷大雅。
最后我放一下我修改后的整體的配置:
-Dide.no.platform.update=true -Dtoolbox.notification.token=ZATtXMyB3ZsNhTvmYivkW7tYp5ZT4GlqKFIx3Bp4_Ik= -Dtoolbox.notification.portFile=D:\IDEA\apps\IDEA-U\ch-0\222.3345.118.vmoptions.port -Didea.plugins.path=D:\\IDEA\\apps\\IDEA-U\\ch-0\\222.3345.118.plugins # 上面部分為最新版本IDEA 默認(rèn)配置,保留即可,新增下面這些配置即可 -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
當(dāng)然,如果不用 IDEA 的同學(xué),只要是用 Jetbrain 全家桶套件,例如寫 Python 最常用的 Pycharm ,同樣也可以按照本文的方式進(jìn)行配置,我自己又給 Pycharm 修改了一下配置,啟動(dòng)速度絕對(duì)大幅提升,肉眼可見的那種。
結(jié)語
到此這篇關(guān)于最新IDEA 2022基于JVM極致優(yōu)化 IDEA啟動(dòng)速度的文章就介紹到這了,更多相關(guān)idea200優(yōu)化 IDEA啟動(dòng)速度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java公眾平臺(tái)通用接口工具類HttpConnectUtil實(shí)例代碼
下面小編就為大家分享一篇java公眾平臺(tái)通用接口工具類HttpConnectUtil實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Java基礎(chǔ)入門篇之邏輯控制練習(xí)題與猜數(shù)字游戲
猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說簡單也很簡單,說不簡單確實(shí)也很難,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)入門篇之邏輯控制練習(xí)題與猜數(shù)字游戲的相關(guān)資料,需要的朋友可以參考下2023-06-06
Java基于面向?qū)ο髮?shí)現(xiàn)一個(gè)戰(zhàn)士小游戲
這篇文章主要為大家詳細(xì)介紹了Java如何基于面向?qū)ο髮?shí)現(xiàn)一個(gè)戰(zhàn)士小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07
Java后端實(shí)現(xiàn)生成驗(yàn)證碼圖片的示例代碼
驗(yàn)證碼是一種用于驗(yàn)證用戶身份或確保用戶操作安全的技術(shù)手段,通常以圖形、聲音或文字的形式出現(xiàn),本文主要介紹了如何通過java實(shí)現(xiàn)生成驗(yàn)證碼圖片,需要的可以參考下2023-12-12
Installij IDEA install或clean項(xiàng)目的使用
這篇文章主要介紹了Installij IDEA install或clean項(xiàng)目的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
IntelliJ IDEA2019 安裝lombok的實(shí)現(xiàn)
這篇文章主要介紹了IntelliJ IDEA2019 安裝lombok的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
如何解決java中遇到的for input string: "" 報(bào)錯(cuò)問題
在本篇文章里小編給大家整理的是一篇關(guān)于如何解決java中遇到的(for input string: "")報(bào)錯(cuò)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-02-02
在JAVA?Web項(xiàng)目中動(dòng)態(tài)加載DLL/SO文件的方法
在JAVA?Web項(xiàng)目中,我們經(jīng)常需要調(diào)用一些第三方庫或者實(shí)現(xiàn)一些JAVA本身不支持的功能,這時(shí),我們可能會(huì)考慮使用JNI來調(diào)用DLL或SO文件,然而,因此,本文將介紹如何在JAVA?Web項(xiàng)目中動(dòng)態(tài)加載DLL/SO文件,需要的朋友可以參考下2024-12-12
mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說明
這篇文章主要介紹了mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01

