在和同事的一次討論中發(fā)現(xiàn),對(duì) IntelliJ IDEA 內(nèi)存采用不同的設(shè)置方案,會(huì)對(duì) IDE 的速度和響應(yīng)能力產(chǎn)生不同的影響。圖片Don’t be a Scrooge and give your IDE some more memory不要做守財(cái)奴,給IDE多留點(diǎn)內(nèi)存吧。昨天,大家就是否自定義IntelliJ IDEA 的內(nèi)存設(shè)置進(jìn)行了討論,有些人選擇默認(rèn)設(shè)置,有些人會(huì)對(duì)默認(rèn)的設(shè)置進(jìn)行簡單的變更,還有一些開發(fā)者會(huì)基于他們的需求進(jìn)行全面復(fù)雜的設(shè)置。筆者目前的工作是處理幾個(gè)微服務(wù)項(xiàng)目和一個(gè)老項(xiàng)目,而客戶的核心業(yè)務(wù)需求非常大。對(duì) IntelliJ IDEA 內(nèi)存進(jìn)行簡單設(shè)置以后,筆者明顯感受到了該 IDE 在速度和響應(yīng)方面的改善。但當(dāng)時(shí)筆者并未進(jìn)行具體的測(cè)量,所以這只是主觀感受而已。不過,參與討論的一位開發(fā)者給筆者發(fā)了一份他的設(shè)置,雖然是針對(duì)同個(gè)項(xiàng)目,該設(shè)置卻極其復(fù)雜。筆者對(duì)自己的設(shè)置并無不滿,但非常好奇,這些完全不同的設(shè)置對(duì)比 JetBrains 提供的默認(rèn)設(shè)置,會(huì)有怎樣的不同。
以上便是筆者的測(cè)試設(shè)置,為了執(zhí)行該測(cè)試用例,還需要在~/Library/Preferences/IntelliJIdea15/下創(chuàng)建一個(gè)idea.vmoptions文件(這是 Mac OS 系統(tǒng)下的路徑設(shè)置,基于你的操作系統(tǒng)進(jìn)行設(shè)置)現(xiàn)在,執(zhí)行測(cè)試用例并比較結(jié)果。結(jié)果
會(huì)發(fā)現(xiàn),對(duì)比其它設(shè)置, GC 在默認(rèn)設(shè)置下會(huì)變得異常忙碌。圖片圖片不僅 GC 釋放內(nèi)存的總時(shí)間非常高(幾乎達(dá)到了50倍),而且 Full GC 的平均執(zhí)行時(shí)間也非常非常長。大量的時(shí)間都花在了 Full GC 上面,這是 IDE 響應(yīng)速度低的主要原因。
在IDEA中打開兩個(gè)微服務(wù)
現(xiàn)在加載這兩個(gè)微服務(wù)項(xiàng)目,在 IDEA 中打開并且對(duì)比他們所消耗的時(shí)間。圖片在這個(gè)測(cè)試用例下,差異還是非常明顯的,復(fù)雜設(shè)置表現(xiàn)最佳,而默認(rèn)設(shè)置仍舊輸給了其他兩種設(shè)置。
現(xiàn)在,筆者需要從倉庫中獲得 Monolith 項(xiàng)目的最新版本,并且刷新 Gradle 模塊,這樣, IDEA 能看到所有的新類。圖片重要提示:代表默認(rèn)設(shè)置的灰色條形柱非常高,因?yàn)?IDEA 在刷新過程中崩潰了,筆者無法測(cè)量實(shí)際時(shí)間。顯然,默認(rèn)分配的內(nèi)存不足以執(zhí)行該操作。但從三個(gè)自定義例子中可以發(fā)現(xiàn),大內(nèi)存配置花費(fèi)的時(shí)間是最短的。所以,內(nèi)存分配還是起到了作用。
最后一次使用jstat-gcutil
因?yàn)?IDEA 在默認(rèn)設(shè)置下無法刷新項(xiàng)目,所以,這次測(cè)試默認(rèn)設(shè)置就不包括在里面。圖片圖片從上圖可以看出,三者之間的差異不大,但是 Big 配置下的 Full GC 執(zhí)行時(shí)間最快。此外, Xmx 內(nèi)存大些對(duì)響應(yīng)能力提升的幫助非常明顯。
總結(jié)
在這次簡短的實(shí)驗(yàn)中,大家可以發(fā)現(xiàn),即使對(duì) IntelliJ IDEA 內(nèi)存進(jìn)行微調(diào),都可以大大提升 IDE 性能。當(dāng)然,內(nèi)存分配越多,執(zhí)行效果就越好。但是,你也會(huì)發(fā)現(xiàn), IDE 之外許多其他應(yīng)用程序也需要消耗內(nèi)存,所以,大家的目標(biāo)應(yīng)該是在提高性能和內(nèi)存消耗之間找到一個(gè)平衡。筆者認(rèn)為,在大多數(shù)情況下,把 Xmx 值設(shè)置在 2G 和 3G 之間是最佳的。如果你有更多的時(shí)間可以用 jstat 和 jvisualm 檢查用不同的 JVM 設(shè)置如何影響性能和內(nèi)存占用。