欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存

 更新時(shí)間:2020年05月08日 14:23:22   作者:程序員喬戈里  
這篇文章主要介紹了IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本文作者在和同事的一次討論中發(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)行簡(jiǎn)單的變更,還有一些開(kāi)發(fā)者會(huì)基于他們的需求進(jìn)行全面復(fù)雜的設(shè)置。筆者目前的工作是處理幾個(gè)微服務(wù)項(xiàng)目和一個(gè)老項(xiàng)目,而客戶的核心業(yè)務(wù)需求非常大。對(duì) IntelliJ IDEA 內(nèi)存進(jìn)行簡(jiǎn)單設(shè)置以后,筆者明顯感受到了該 IDE 在速度和響應(yīng)方面的改善。但當(dāng)時(shí)筆者并未進(jìn)行具體的測(cè)量,所以這只是主觀感受而已。

不過(guò),參與討論的一位開(kāi)發(fā)者給筆者發(fā)了一份他的設(shè)置,雖然是針對(duì)同個(gè)項(xiàng)目,該設(shè)置卻極其復(fù)雜。筆者對(duì)自己的設(shè)置并無(wú)不滿,但非常好奇,這些完全不同的設(shè)置對(duì)比 JetBrains 提供的默認(rèn)設(shè)置,會(huì)有怎樣的不同。

目標(biāo)

筆者的計(jì)劃是,在一個(gè)接近日常開(kāi)發(fā)項(xiàng)目的場(chǎng)景下(加載一個(gè)大項(xiàng)目、加載2、3個(gè)微服務(wù)、git pull 后刷新大項(xiàng)目),測(cè)試各個(gè)設(shè)置帶來(lái)的效果,并選出內(nèi)存消耗和速度都達(dá)到最優(yōu)時(shí)的最佳設(shè)置。

測(cè)試機(jī)器和項(xiàng)目

筆記本電腦:MacBook Pro Retina, 2.3GHz Intel Core i7, 16GB 1600Mhz DDR3,SSD Disc, OS X Yosemite

項(xiàng)目

大項(xiàng)目—— Monolith ,70萬(wàn)行代碼( Java 8 和 Groovy ),303個(gè)Gradle模塊

兩個(gè)微服務(wù)——約有10000——20000行代碼( Java 8 和 Groovy )的小項(xiàng)目,各有一個(gè)Gradle模塊

測(cè)試場(chǎng)景

  • 在 Idea 中關(guān)閉所有項(xiàng)目
  • 基于測(cè)試文件 idea.vmoptions 進(jìn)行設(shè)置
  • 重啟電腦
  • 啟動(dòng)后關(guān)閉所有不相關(guān)的項(xiàng)目( communicators 等等)
  • 打開(kāi) Idea(測(cè)試時(shí)間)
  • 打開(kāi)大項(xiàng)目(測(cè)試時(shí)間)
  • 檢查 jstat -gcutil
  • 打開(kāi)兩個(gè)微服務(wù)項(xiàng)目(測(cè)試時(shí)間)
  • 檢查 jstat -gcutil
  • 返回大項(xiàng)目然后點(diǎn)擊“刷新 Gradle 項(xiàng)目”按鈕(測(cè)試時(shí)間)
  • 檢查 jstat -gcutil

jstat -gcutil

jstat 是 JDK 自帶的工具,主要利用 JVM 內(nèi)建的指令對(duì) Java 應(yīng)用程序的資源和性能進(jìn)行實(shí)時(shí)的命令行監(jiān)控,還包括對(duì) Heap size 和垃圾回收狀況的監(jiān)控。

jstat 完整的文檔:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

它有許多選項(xiàng)來(lái)收集各種數(shù)據(jù),但這里只會(huì)用到:-gcutil :

-gcutil - Summary of garbage collection statistics.
S0: Survivor space 0 utilization as a percentage of the space's current capacity. 
S1: Survivor space 1 utilization as a percentage of the space's current capacity. 
E: Eden space utilization as a percentage of the space's current capacity. 
O: Old space utilization as a percentage of the space's current capacity. 
M: Metaspace utilization as a percentage of the space's current capacity. 
CCS: Compressed class space utilization as a percentage. 
YGC: Number of young generation GC events. 
YGCT: Young generation garbage collection time. 
FGC: Number of full GC events. 
FGCT: Full garbage collection time. 
GCT: Total garbage collection time. 

這個(gè)命令的輸出結(jié)果如下:

S0   S1  E   O   M  CCS YGC YGCT FGC FGCT  GCT 
89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159 

在本文中,最重要的參數(shù)是 GC 事件( YGC 和 FGC )次數(shù)和收集時(shí)間( YGCT 和 FGCT )。

測(cè)試設(shè)置

筆者設(shè)置了四種不同的設(shè)置,為了好記,給它們起了不同的名字。

默認(rèn)(灰色標(biāo)識(shí))

JetBrains 提供的默認(rèn)設(shè)置:

-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

Big(大)(紅色標(biāo)識(shí))

給 Xmx 配 4096MB, ReservedCodeCacheSize 設(shè)置 1024MB,這已經(jīng)是相當(dāng)多的內(nèi)存了:

-Xms1024m
-Xmx4096m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

Balanced(平衡的)(藍(lán)色標(biāo)識(shí))

Xmx 和 Xms 都分配 2GB ,這是相當(dāng)平衡的內(nèi)存消耗:

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

Sophisticated(復(fù)雜的)(橘色標(biāo)識(shí))

和上面一樣, Xmx 和 Xms 都分配2GB,但是給 GC 和內(nèi)存管理指定不同的垃圾回收器和許多不同的標(biāo)志:

-server
-Xms2g
-Xmx2g
-XX:NewRatio=3
-Xss16m
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:ConcGCThreads=4
-XX:ReservedCodeCacheSize=240m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:+UseCompressedOops
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-ea

以上便是筆者的測(cè)試設(shè)置,為了執(zhí)行該測(cè)試用例,還需要在~/Library/Preferences/IntelliJIdea15/下創(chuàng)建一個(gè)idea.vmoptions文件(這是 Mac OS 系統(tǒng)下的路徑設(shè)置,基于你的操作系統(tǒng)進(jìn)行設(shè)置,關(guān)注公眾號(hào):Java面試那些事兒,回復(fù)關(guān)鍵字idea,獲取最新的idea教程)

現(xiàn)在,執(zhí)行測(cè)試用例并比較結(jié)果。

結(jié)果

Idea啟動(dòng)時(shí)間

正如上圖所示,啟動(dòng)時(shí)間并不依賴于內(nèi)存設(shè)置。Idea 在所有場(chǎng)景下的測(cè)試時(shí)間都是10秒,無(wú)論內(nèi)存分配有多少。這并不足為奇,因?yàn)樵诖嗽缙陔A段,這些設(shè)置并不會(huì)影響到應(yīng)用的行為。更多IDEA內(nèi)容:IntelliJ IDEA 2020.1 已正式發(fā)布

加載大項(xiàng)目花費(fèi)的時(shí)間

現(xiàn)在加載 Monolith 項(xiàng)目及其70萬(wàn)行代碼。終于,出現(xiàn)了一些的差異。默認(rèn)設(shè)置所花費(fèi)的時(shí)間幾乎是其它的3倍。很明顯,如此龐大的代碼庫(kù)需要更多的內(nèi)存。如果我們執(zhí)行:

jstat -gcutil <IDEA_PID> 

會(huì)發(fā)現(xiàn),對(duì)比其它設(shè)置, GC 在默認(rèn)設(shè)置下會(huì)變得異常忙碌。

不僅 GC 釋放內(nèi)存的總時(shí)間非常高(幾乎達(dá)到了50倍),而且 Full GC 的平均執(zhí)行時(shí)間也非常非常長(zhǎng)。大量的時(shí)間都花在了 Full GC 上面,這是 IDE 響應(yīng)速度低的主要原因。

在IDEA中打開(kāi)兩個(gè)微服務(wù)

現(xiàn)在加載這兩個(gè)微服務(wù)項(xiàng)目,在 IDEA 中打開(kāi)并且對(duì)比他們所消耗的時(shí)間。

在這個(gè)測(cè)試用例下,差異還是非常明顯的,復(fù)雜設(shè)置表現(xiàn)最佳,而默認(rèn)設(shè)置仍舊輸給了其他兩種設(shè)置。

再次使用jstat –gcutil

加載完兩個(gè)微服務(wù)項(xiàng)目后,來(lái)檢查一下同時(shí)打開(kāi)3個(gè)項(xiàng)目的情況下, GC 的表現(xiàn)情況。經(jīng)測(cè)試發(fā)現(xiàn),3個(gè)不同的自定義設(shè)置表現(xiàn)幾乎差不多,而默認(rèn)設(shè)置簡(jiǎn)直弱爆了。

最后的角逐:重新加載Monolith

現(xiàn)在,筆者需要從倉(cāng)庫(kù)中獲得 Monolith 項(xiàng)目的最新版本,并且刷新 Gradle 模塊,這樣, IDEA 能看到所有的新類。

重要提示:代表默認(rèn)設(shè)置的灰色條形柱非常高,因?yàn)?IDEA 在刷新過(guò)程中崩潰了,筆者無(wú)法測(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è)置下無(wú)法刷新項(xiàng)目,所以,這次測(cè)試默認(rèn)設(shè)置就不包括在里面。

從上圖可以看出,三者之間的差異不大,但是 Big 配置下的 Full GC 執(zhí)行時(shí)間最快。此外, Xmx 內(nèi)存大些對(duì)響應(yīng)能力提升的幫助非常明顯。

總結(jié)

在這次簡(jiǎn)短的實(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)存占用。

討論

你的 idea.vmoptions 是如何配置的呢?你還有其它提高 InteliJ IDEA 性能的方法嗎?不妨一起討論討論吧。

譯者:OneAPM

譯文:blog.oneapm.com/apm-tech/426.html

原文:dzone.com/articles/the-one-and-only-reason-to-customize-intellij-idea

到此這篇關(guān)于IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存的文章就介紹到這了,更多相關(guān)IntelliJ IDEA 優(yōu)化內(nèi)存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于QGIS的研究區(qū)域遙感影像裁切下載方法(以岳麓區(qū)為例)

    基于QGIS的研究區(qū)域遙感影像裁切下載方法(以岳麓區(qū)為例)

    本文以湖南省長(zhǎng)沙市岳麓區(qū)為例,主要講解如何基于QGIS這款軟件,把岳麓區(qū)范圍內(nèi)的遙感影像下載,并使用QGIS進(jìn)行切片,最后用Leaflet進(jìn)行展示的例子,對(duì)QGIS遙感影像裁切下載相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 在命令行用 sort 進(jìn)行排序的方法

    在命令行用 sort 進(jìn)行排序的方法

    這篇文章主要介紹了在命令行用 sort 進(jìn)行排序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 在ubuntu18.04版本安裝vscode(2種)

    在ubuntu18.04版本安裝vscode(2種)

    這篇文章主要介紹了在ubuntu18.04版本安裝vscode,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 12個(gè)Visual Studio調(diào)試效率技巧(小結(jié))

    12個(gè)Visual Studio調(diào)試效率技巧(小結(jié))

    這篇文章主要介紹了12個(gè)Visual Studio調(diào)試效率技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 關(guān)于頁(yè)面刷新,事件重復(fù)提交的方法分享

    關(guān)于頁(yè)面刷新,事件重復(fù)提交的方法分享

    在處理頁(yè)面事件時(shí),我們會(huì)經(jīng)常會(huì)碰到這樣的情況:當(dāng)我們?cè)谔峤灰豁?xiàng)頁(yè)面表單時(shí),在提交成功后,當(dāng)我們?cè)噲D按F5刷新頁(yè)面時(shí),數(shù)據(jù)會(huì)再次的被重復(fù)提交
    2012-10-10
  • 20個(gè)提高開(kāi)發(fā)效率的VS Code快捷鍵(推薦)

    20個(gè)提高開(kāi)發(fā)效率的VS Code快捷鍵(推薦)

    這篇文章主要給大家介紹了20個(gè)提高開(kāi)發(fā)效率的VS Code快捷鍵,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決git 提交后中文字符會(huì)亂碼的問(wèn)題

    解決git 提交后中文字符會(huì)亂碼的問(wèn)題

    這篇文章主要介紹了解決git 提交后中文字符會(huì)亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • FlippingBook使用教程(附下載)

    FlippingBook使用教程(附下載)

    FlippingBook是一款收費(fèi)的圖書(shū)翻頁(yè)效果的flash播放器,這里為大家介紹下FlippingBook的使用方法,需要的朋友可以參考下
    2014-12-12
  • 使用Git進(jìn)行版本控制的實(shí)踐分享

    使用Git進(jìn)行版本控制的實(shí)踐分享

    Git 是目前最流行的分布式版本控制系統(tǒng),廣泛應(yīng)用于前端開(kāi)發(fā),Git的強(qiáng)大功能讓開(kāi)發(fā)者能夠有效管理代碼、協(xié)作開(kāi)發(fā)、追蹤代碼變更和版本發(fā)布,在本文中,我們將探討前端開(kāi)發(fā)者在使用 Git 進(jìn)行版本控制時(shí)應(yīng)遵循的一些最佳實(shí)踐,需要的朋友可以參考下
    2024-10-10
  • Idea中的git命令使用詳解(包括現(xiàn)象含義)

    Idea中的git命令使用詳解(包括現(xiàn)象含義)

    本文帶領(lǐng)大家梳理在idea中常用的git命令,對(duì)idea?git命令使用相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評(píng)論