最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

本文作者在和同事的一次討論中發(fā)現(xiàn),對 IntelliJ IDEA 內(nèi)存采用不同的設置方案,會對 IDE 的速度和響應能力產(chǎn)生不同的影響。

Don't be a Scrooge and give your IDE some more memory

不要做守財奴,給IDE多留點內(nèi)存吧。

昨天,大家就是否自定義 IntelliJ IDEA 的內(nèi)存設置進行了討論,有些人選擇默認設置,有些人會對默認的設置進行簡單的變更,還有一些開發(fā)者會基于他們的需求進行全面復雜的設置。筆者目前的工作是處理幾個微服務項目和一個老項目,而客戶的核心業(yè)務需求非常大。對 IntelliJ IDEA 內(nèi)存進行簡單設置以后,筆者明顯感受到了該 IDE 在速度和響應方面的改善。但當時筆者并未進行具體的測量,所以這只是主觀感受而已。

不過,參與討論的一位開發(fā)者給筆者發(fā)了一份他的設置,雖然是針對同個項目,該設置卻極其復雜。筆者對自己的設置并無不滿,但非常好奇,這些完全不同的設置對比 JetBrains 提供的默認設置,會有怎樣的不同。

目標

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

測試機器和項目

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

項目

大項目—— Monolith ,70萬行代碼( Java 8 和 Groovy ),303個Gradle模塊

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

測試場景

  • 在 Idea 中關閉所有項目
  • 基于測試文件 idea.vmoptions 進行設置
  • 重啟電腦
  • 啟動后關閉所有不相關的項目( communicators 等等)
  • 打開 Idea(測試時間)
  • 打開大項目(測試時間)
  • 檢查 jstat -gcutil
  • 打開兩個微服務項目(測試時間)
  • 檢查 jstat -gcutil
  • 返回大項目然后點擊“刷新 Gradle 項目”按鈕(測試時間)
  • 檢查 jstat -gcutil

jstat -gcutil

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

jstat 完整的文檔:

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

它有許多選項來收集各種數(shù)據(jù),但這里只會用到:-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. 

這個命令的輸出結果如下:

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ù)和收集時間( YGCT 和 FGCT )。

測試設置

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

默認(灰色標識)

JetBrains 提供的默認設置:

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

Big(大)(紅色標識)

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

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

Balanced(平衡的)(藍色標識)

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

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

Sophisticated(復雜的)(橘色標識)

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

-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

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

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

結果

Idea啟動時間

正如上圖所示,啟動時間并不依賴于內(nèi)存設置。Idea 在所有場景下的測試時間都是10秒,無論內(nèi)存分配有多少。這并不足為奇,因為在此早期階段,這些設置并不會影響到應用的行為。更多IDEA內(nèi)容:IntelliJ IDEA 2020.1 已正式發(fā)布

加載大項目花費的時間

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

jstat -gcutil <IDEA_PID> 

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

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

在IDEA中打開兩個微服務

現(xiàn)在加載這兩個微服務項目,在 IDEA 中打開并且對比他們所消耗的時間。

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

再次使用jstat –gcutil

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

最后的角逐:重新加載Monolith

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

重要提示:代表默認設置的灰色條形柱非常高,因為 IDEA 在刷新過程中崩潰了,筆者無法測量實際時間。顯然,默認分配的內(nèi)存不足以執(zhí)行該操作。

但從三個自定義例子中可以發(fā)現(xiàn),大內(nèi)存配置花費的時間是最短的。所以,內(nèi)存分配還是起到了作用。

最后一次使用jstat-gcutil

因為 IDEA 在默認設置下無法刷新項目,所以,這次測試默認設置就不包括在里面。

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

總結

在這次簡短的實驗中,大家可以發(fā)現(xiàn),即使對 IntelliJ IDEA 內(nèi)存進行微調(diào),都可以大大提升 IDE 性能。當然,內(nèi)存分配越多,執(zhí)行效果就越好。但是,你也會發(fā)現(xiàn), IDE 之外許多其他應用程序也需要消耗內(nèi)存,所以,大家的目標應該是在提高性能和內(nèi)存消耗之間找到一個平衡。

筆者認為,在大多數(shù)情況下,把 Xmx 值設置在 2G 和 3G 之間是最佳的。如果你有更多的時間可以用 jstat 和 jvisualm 檢查用不同的 JVM 設置如何影響性能和內(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

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

相關文章

  • AES加密算法的原理詳解與實現(xiàn)分析

    AES加密算法的原理詳解與實現(xiàn)分析

    這篇文章主要介紹了高級加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法的)。對稱加密算法也就是加密和解密用相同的密鑰,需要的朋友可以參考下
    2020-08-08
  • VSCode中ESLint插件修復以及配置教程

    VSCode中ESLint插件修復以及配置教程

    最近為vsocde配置Eslint出現(xiàn)了許多問題,我解決問題之后,覺得還是把這些坑都寫清楚,方便學習前端的初學者,下面這篇文章主要給大家介紹了關于VSCode中ESLint插件修復以及配置教程的相關資料,需要的朋友可以參考下
    2022-12-12
  • 分享幾個新增備案不關站的代碼

    分享幾個新增備案不關站的代碼

    這篇文章主要介紹了分享幾個新增備案不關站的代碼,需要的朋友可以參考下
    2015-01-01
  • 常用VsCode 快捷鍵(Window & Mac)GIF演示

    常用VsCode 快捷鍵(Window & Mac)GIF演示

    本文給大家分享了23個常用VsCode 快捷鍵(Window & Mac)的GIF動圖演示,非常的實用,有需要的小伙伴可以拿走參考
    2020-02-02
  • php和asp利用Shell.Application來執(zhí)行程序的代碼

    php和asp利用Shell.Application來執(zhí)行程序的代碼

    關于用Shell.Application來執(zhí)行程序,在海陽頂端asp木馬里已有示例。用的是ShellExecute 這個方法。
    2008-12-12
  • Postman配置多環(huán)境請求地址的實現(xiàn)

    Postman配置多環(huán)境請求地址的實現(xiàn)

    本文主要介紹了Postman配置多環(huán)境請求地址的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 通過Cursor工具使用GPT-4的方法詳解

    通過Cursor工具使用GPT-4的方法詳解

    Cursor?是集成了?GPT-4?的?IDE?工具,目前免費并且無需?API?Key,支持?Win、Mac、Linux?平臺,可以按要求生成代碼,或者讓?AI?幫助優(yōu)化代碼,分析代碼,這篇文章主要介紹了通過Cursor工具使用GPT-4的方法,需要的朋友可以參考下
    2023-05-05
  • git?push指令常見選項和用法詳解

    git?push指令常見選項和用法詳解

    Git中的git?push命令用于將本地倉庫的改動推送到遠程倉庫,是協(xié)同開發(fā)中的重要工具,在團隊合作中,使用git?push和git?pull可以有效維護項目同步,避免沖突,推送時若遇到?jīng)_突需先解決后再進行推送,需要的朋友可以參考下
    2024-09-09
  • 如何通過memberlist庫實現(xiàn)gossip管理集群及集群數(shù)據(jù)交互問題

    如何通過memberlist庫實現(xiàn)gossip管理集群及集群數(shù)據(jù)交互問題

    這篇文章主要介紹了通過memberlist庫實現(xiàn)gossip管理集群以及集群數(shù)據(jù)交互,本文介紹了memberlist庫的簡單用法,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Git commit --amend 修改提交信息操作

    Git commit --amend 修改提交信息操作

    這篇文章主要介紹了Git commit --amend 修改提交信息操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

新和县| 玉门市| 肃北| 花垣县| 广昌县| 砚山县| 仲巴县| 重庆市| 张掖市| 策勒县| 龙陵县| 肇东市| 吴江市| 瑞昌市| 沈阳市| 清涧县| 贵港市| 石渠县| 红桥区| 旺苍县| 桂林市| 澄迈县| 乐山市| 连江县| 响水县| 孟津县| 龙井市| 探索| 民丰县| 化德县| 高台县| 洞头县| 德化县| 长治市| 普定县| 利川市| 浦城县| 富源县| 迁安市| 普安县| 岚皋县|