日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

瀏覽:48日期:2024-07-31 14:39:25

本文已被Github倉庫收錄 https://github.com/silently9527/JavaCore

前言

在前面整理了一篇關(guān)于JVM故障診斷和處理工具,考慮到大部分的Java程序員都使用的是IntelliJ Idea,本篇就使用工具來實戰(zhàn)演練對IntelliJ Idea運行速度調(diào)優(yōu)

調(diào)優(yōu)前的運行狀態(tài)

原始配置內(nèi)容

要查詢idea原始配置文件的路徑可以在VisualVM中的概述中查看

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

原始配置內(nèi)容:

-XX:ReservedCodeCacheSize=240m-XX:+UseCompressedOops-Dfile.encoding=UTF-8-XX:SoftRefLRUPolicyMSPerMB=50-ea-Dsun.io.useCanonCaches=false-Djava.net.preferIPv4Stack=true-Djdk.http.auth.tunneling.disabledSchemes=''-XX:+HeapDumpOnOutOfMemoryError-XX:-OmitStackTraceInFastThrow-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof-Xmx512m打印啟動時間插件開發(fā)

需要直觀的看到優(yōu)化前和優(yōu)化后啟動時間的變化,所以需要簡單做一個Idea的插件開發(fā),關(guān)于Idea插件開發(fā)的流程建議參考我以前的文章《IDEA插件:多線程文件下載插件開發(fā)》

JVM的啟動時間到所有組件初始化完成后的時間就看做是IDEA的啟動時間,代碼如下

public class MyApplicationInitializedListener implements ApplicationInitializedListener { @Override public void componentsInitialized() { RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); long startTime = bean.getStartTime(); long costTime = System.currentTimeMillis() - startTime; Messages.showMessageDialog('毫秒:' + costTime, '啟動耗時', Messages.getInformationIcon()); }}

plugin.xml中添加如下代碼:

<extensions defaultExtensionNs='com.intellij'> <applicationInitializedListener implementation='cn.silently9527.MyApplicationInitializedListener'/></extensions>

優(yōu)化前的啟動信息與時間消耗

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑 JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

根據(jù)VisualGC和IDEA啟動插件收集到的信息:

IDEA啟動耗時 15s 總共垃圾收集22次,耗時1.2s,其中新生代GC 17次,耗時324ms; 老年代GC 5次,耗時953ms 加載類27526個,耗時 21s

按照這個數(shù)據(jù)來看也算是正常,15s 其實也在接受范圍內(nèi),由于本文主要演示性能調(diào)優(yōu),所以需要測試能否在快一些

開始嘗試優(yōu)化

調(diào)整內(nèi)存來控制垃圾回收頻率

圖上我們可以看出,啟動參數(shù)指定的512m的內(nèi)存被分配到新生代的只有169m,由于IDEA是我們開發(fā)常用的工具,平時的編譯過程也需要足夠的內(nèi)存,所以我們需要先把總的內(nèi)存擴大,這里我設(shè)置最大的內(nèi)存 -Xmx1024m ,為了讓JVM在GC期間不需要再浪費時間再動態(tài)計算擴容大小,同時也設(shè)置了 -Xms1024m ;

在啟動的過程中Eden共發(fā)生了17次GC,為了減少新生代gc次數(shù),我把新生代的內(nèi)存大小設(shè)置成 -Xmn256m ;

重新啟動之后查看VisualGC,新生代gc次數(shù)從 17次 降低到了 7次,耗時從 324ms 降低到了 152ms。

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

在調(diào)整內(nèi)存前發(fā)生了5次Full GC,調(diào)整內(nèi)存后的依然還是有4次Full GC,但是從兩張圖我們可以看出,老年代的空間還有很多剩余,是不應(yīng)該發(fā)生Full GC的;考慮是否是代碼中有地方手動調(diào)用 System.gc() 出發(fā)了Full GC,所以添加了參數(shù) -XX:+DisableExplicitGC ,再次重新啟動IDEA,結(jié)果很失望,依然還有4次Full GC;

再次仔細觀察優(yōu)化前的圖,注意看 Last Cause: Metadata GC Threshold , 最后一次gc是應(yīng)該Metaspace區(qū)域內(nèi)存不夠發(fā)生的GC,為了驗證我們的猜想,打印出GC日志來看看。在 idea.vmoptions 中添加打印日志相關(guān)的參數(shù):

-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Xloggc:../gc.log

JVM的GC日志的主要參數(shù)包括如下幾個:

-XX:+PrintGC 輸出GC日志 -XX:+PrintGCDetails 輸出GC的詳細日志 -XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準(zhǔn)時間的形式) -XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在進行GC的前后打印出堆的信息 -Xloggc:../logs/gc.log 日志文件的輸出路徑

重新啟動idea,查看gc.log

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

其中 PSYoungGen: 表示新生代使用的ParallelScavenge垃圾收集器, 31416K->0K(181248K) 表示 gc前已使用的內(nèi)存大小 -> gc后已使用內(nèi)存大小(該區(qū)域的總內(nèi)存大小)

從日志中我們看出每次Full GC都是因為 Metadata GC Threshold ,而Metaspace每次gc回收的內(nèi)存幾乎沒有,僅僅是擴大了該區(qū)域的容量;找到了原因那就好辦了,添加如下的參數(shù)調(diào)整Metaspace的大小:

-XX:MetaspaceSize=256m

再次重啟Idea之后,發(fā)現(xiàn)Full GC沒有了,心情很爽

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

測試打開大項目點擊編譯代碼,發(fā)現(xiàn)自己的idea卡死了,查看VisualGC之后發(fā)現(xiàn)堆內(nèi)存都還有空閑,只有Metaspace被全部占滿了,所以是自己給的最大空間設(shè)置太小,所以直接去掉了 -XX:MaxMetaspaceSize=256m

選擇垃圾收集器

從剛才的gc日志中,我們可以發(fā)現(xiàn)默認使用的是ParallelScavenge + Parallel Old垃圾收集器,這個組合注重的是吞吐量,這里我們嘗試換一個注重低延時的垃圾收集器試一試

ParNew + CMS

在 idea.vmoptions 中添加如下配置:

-XX:+UseConcMarkSweepGC-XX:+UseParNewGC

重啟IDEA之后查看VisualGC

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

很尷尬,同樣發(fā)生了6次gc, ParallelScavenge + Parallel Old 的組合耗時197ms,而 ParNew + CMS 的組合耗時379ms;雖然是這個結(jié)果,但是我們需要考慮當(dāng)前只發(fā)生了MinorGC,如果發(fā)生FullGC了結(jié)果又會如何了,大家可以自己測試一下

G1

我們在換一個最新的G1垃圾回收器試試,在 idea.vmoptions 中添加如下配置:

-XX:+UseG1GC

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

這個結(jié)果好像也還是要慢一點點,自己多次測試過這兩個垃圾回收器,雖然每次結(jié)果都不一樣,相差不遠,所以垃圾回收器可以自己選擇,這里我們選擇的是G1

類加載時間優(yōu)化

根據(jù)之前的分析,idea啟動加載類27526個,耗時 21s,這個我們有辦法能優(yōu)化一下嗎?因為idea是常用的開發(fā)工具,經(jīng)常很多人的使用,我們可以認為它的代碼是安全的,是否符合當(dāng)前虛擬機的要求,不會危害虛擬機的安全,所以我們使用參數(shù) -Xverify:none 來禁用字節(jié)碼的驗證過程

重啟IDEA

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

耗時下降到了11s,效果還是比較明顯的

總結(jié)

做完了所有優(yōu)化之后,經(jīng)過多次重啟測試,平均的啟動時間下降到了11s,為了安慰我本次操作沒有白辛苦,搞一張11s以下的圖

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

我已經(jīng)從零開始手寫了簡易版springmvc,以及編寫了詳細的說明文檔,希望能夠幫助伙伴們深入理解springmvc核心原理.

JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑 JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑

源碼獲取地址:我把開源的項目代碼都已經(jīng)放到了Git倉庫,Github倉庫地址:https://github.com/silently9527 ,碼云倉庫地址:https://gitee.com/silently9527 ,

到此這篇關(guān)于JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑的文章就介紹到這了,更多相關(guān)JVM性能調(diào)優(yōu)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: IDEA
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
不卡在线一区| 999久久久国产精品| 黄色欧美日韩| 国产二区精品| 亚洲一区日韩在线| 99亚洲视频| 亚洲一区国产| 久久国产精品久久久久久电车| 黄色日韩在线| 亚洲少妇诱惑| 蜜桃传媒麻豆第一区在线观看| 三级一区在线视频先锋| 中文一区一区三区免费在线观 | 四虎在线精品| 日韩精品国产欧美| 国产精品美女在线观看直播| 国产精品videosex极品| 激情不卡一区二区三区视频在线| 高清在线一区| 国产99久久| 西西人体一区二区| 欧美一区成人| 97精品国产一区二区三区| 神马久久午夜| 欧美日韩高清| 日本不卡不码高清免费观看| 国产精品qvod| 日本高清不卡一区二区三区视频| 黑丝一区二区| 日韩手机在线| 精品中文字幕一区二区三区四区| 日韩电影在线视频| 亚洲精品一区二区在线看| 亚洲有吗中文字幕| 国产极品模特精品一二| 亚洲电影有码| 亚洲精品免费观看| 国产一区丝袜| 婷婷激情综合| 欧美一区网站| 久久激情中文| 日本一区免费网站| 热三久草你在线| 综合视频一区| 精品国产欧美日韩| 亚洲激情精品| 欧美激情亚洲| 亚洲欧美视频| 国产成人77亚洲精品www| 夜夜嗨网站十八久久| 欧美日韩午夜| 999国产精品999久久久久久| 亚洲不卡视频| 神马午夜在线视频| 性色一区二区| 麻豆一区二区三| 国产精品日韩欧美一区| 老司机免费视频一区二区| 激情婷婷综合| 久久av资源| 亚洲制服少妇| 成人国产精品| 日本va欧美va瓶| 欧美成人国产| 乱一区二区av| 一本综合精品| 久久精品国产大片免费观看| 国产毛片精品久久| 亚洲深夜影院| 成人精品动漫一区二区三区| 色8久久久久| 精品国模一区二区三区| 91精品美女| 夜久久久久久| 成人免费电影网址| 国产精品久久久久9999高清| 午夜宅男久久久| 少妇久久久久| 精品国产一区二| 日本免费一区二区视频| 亚洲欧洲一区二区天堂久久| 97精品在线| 久久99久久久精品欧美| 亚洲午夜久久| 精品亚洲美女网站| 久久亚洲资源中文字| 亚洲制服欧美另类| 九九久久婷婷| 日本在线精品| 给我免费播放日韩视频| 国产精品久久久久av蜜臀| 亚洲精品人人| 美女黄网久久| 午夜精品免费| 亚洲a在线视频| 日韩88av| 免费在线欧美黄色| 日韩av电影一区| 蜜桃久久久久久| 欧美日韩国产一区精品一区| 欧美亚洲日本精品| 成人免费一区| 精品日韩一区| 麻豆精品久久| 国产精品一二| 欧美一级一区| 婷婷精品在线| 亚洲精品动态| 蜜桃久久av一区| 亚洲欧美视频一区二区三区| 亚洲国产成人精品女人| 亚洲电影在线| 国产99亚洲| 亚洲精品一区二区妖精| 久久黄色影院| 久久精品国产亚洲夜色av网站| 成人亚洲一区| 国产suv精品一区二区四区视频| 精品入口麻豆88视频| 精品亚洲精品| 国精品产品一区| 成人一区不卡| 另类中文字幕国产精品| 欧美亚洲在线日韩| 伊人久久大香线蕉av不卡| 久久精品国产大片免费观看| 亚洲性图久久| 欧美在线资源| 三级欧美韩日大片在线看| 亚洲少妇自拍| 亚洲青青久久| 欧美综合精品| 精品黄色一级片| a天堂资源在线| 三级精品视频| 日韩精品一区二区三区免费观看| 欧美亚洲精品在线| 日韩中文字幕区一区有砖一区| 亚洲精一区二区三区| 日本午夜精品| 精品网站aaa| 国产91精品对白在线播放| 国产精品日本| 天堂va欧美ⅴa亚洲va一国产| 日本在线视频一区二区| 国产欧美三级| 精品女同一区二区三区在线观看| 欧美国产一级| 欧美综合另类| 亚洲精品美女91| 美女国产一区二区三区| 日韩一区电影| 久久最新视频| 国产伦理一区| 韩国精品主播一区二区在线观看| 99在线精品免费视频九九视 | 日韩avvvv在线播放| 久久精品一区二区三区中文字幕| 中文av在线全新| 一本一道久久a久久精品蜜桃| 午夜精品影视国产一区在线麻豆| 国产精品久久久久久久久久久久久久久 | 一二三区精品| 欧美交a欧美精品喷水| 精品成人18| 999国产精品永久免费视频app| 亚洲综合小说| а√天堂8资源在线| 宅男噜噜噜66国产日韩在线观看| 国产视频一区二| 快播电影网址老女人久久| 石原莉奈一区二区三区在线观看| 国产精品1区在线| 亚洲大片在线| 国产日本亚洲| 婷婷成人在线| 国产日韩一区二区三免费高清| 成人av三级| 亚洲精品极品| 国产精品成久久久久| 性色一区二区| 成人一区而且| 亚洲精品日韩久久| 亚洲啊v在线| 日韩av一二三| 久久亚洲国产| 国产极品嫩模在线观看91精品| 欧美日韩国产综合网| 美女精品视频在线| 蜜臀国产一区二区三区在线播放| 精品视频国内| 最新亚洲国产| 国产精品字幕| 国产精品一国产精品| 国产韩日影视精品| 麻豆成人在线观看| 国产亚洲在线观看| 国产成人精品一区二区三区免费| 综合欧美精品| 一区二区亚洲精品|