IntelliJ IDEA 2017.1 JDK 8 性能調優

IntelliJ IDEA 問題描述

IntelliJ IDEA 在 多窗口、多項目協做開發時,MacBook Pro的散熱風扇兇猛地轉動,相關配置以下:java

MacBook Pro 配置

MacBook Pro (Retina, 15-inch, Mid 2015)
型號名稱:    MacBook Pro
型號標識符:    MacBookPro11,4
處理器名稱:    Intel Core i7
處理器速度:    2.2 GHz
處理器數目:    1
核總數:    4
L2 緩存(每一個核):    256 KB
L3 緩存:    6 MB
內存:    16 GB
Boot ROM 版本:    MBP114.0172.B16
SMC 版本(系統):    2.29f24

IntelliJ IDEA 版本

IntelliJ IDEA 2017.1.5
Build #IC-171.4694.70, built on July 4, 2017
JRE: 1.8.0_131-b11 x86_64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Mac OS X 10.12.5

問題緣由

默認的IDEA JVM參數配置較低,其中配置存放在 /Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions 文件中,該文件爲IDEA 全局配置文件:redis

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m

解決方法

修改Info.plist文件

定位Info.plist文件

該文件存放在/Applications/IntelliJ IDEA CE.app/Contents 目錄下:算法

total 32
16 -rw-r--r--    1 Mercy  admin  4210  7 11 18:43 Info.plist
 0 drwxr-xr-x@   3 Mercy  admin   102  7 11 16:21 MacOS
 0 drwxr-xr-x@   7 Mercy  admin   238  7  5 14:06 Resources
 0 drwxr-xr-x@   3 Mercy  admin   102  7  5 14:06 _CodeSignature
 0 drwxr-xr-x@  13 Mercy  admin   442  7 11 18:00 bin
 0 drwxr-xr-x@ 116 Mercy  admin  3944  7  5 14:06 lib
 0 drwxr-xr-x@  34 Mercy  admin  1156  4 25 15:49 license
 0 drwxr-xr-x@  33 Mercy  admin  1122  4 25 15:49 plugins
 0 drwxr-xr-x@   3 Mercy  admin   102  7  5 14:06 redist

修改VMOptions

用 vi 工具打開Info.plist ,其中存在一個 key 元素內容爲VMOptions的設置,以下所示:緩存

<key>VMOptions</key>
<string>-Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log -XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar</string>

其中JVM 參數 -XX:+UseConcMarkSweepGC 爲 IDEA 默認配置GC 算法,將其移除,修改成:app

<key>VMOptions</key>
<string>-Dfile.encoding=UTF-8 -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log -XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar</string>

修改用戶idea.vmoptions文件

切換當前用戶的IDEA 配置目錄

經過命令行,cd到~/Library/Preferences/IntelliJIdeaXX/目錄下,如本人的機器路徑:ide

/Users/Mercy/Library/Preferences/IdeaIC2017.1

新建或更新用戶idea.vmoptions文件

將新建或者待更新的idea.vmoptions文件,更新如下JVM 配置項工具

-server
-XX:+UseG1GC
-XX:+UseNUMA
-Xms512m
-Xmn512m
-Xmx8g
-XX:MaxMetaspaceSize=512m
-XX:ReservedCodeCacheSize=240m

調優後觀察

風扇旋轉狀況

啓動 IntelliJ IDEA 2017.1 後一小時有餘,發現風扇狂轉的問題基本上沒有發生。ui

JVM 概要狀況

經過工具JConsole 鏈接 IDEA 進程,觀察相關數據。idea

鏈接名稱: pid: 9743                                        運行時間: 1 小時 39 分鐘
虛擬機: Java HotSpot(TM) 64-Bit Server VM版本 25.131-b11   進程 CPU 時間: 6 分鐘

JVM 參數狀況

VM 參數:-Dfile.encoding=UTF-8 -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true 
-XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none 
-XX:ErrorFile=/Users/Mercy/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/Mercy/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar 
-server -XX:+UseG1GC -XX:+UseNUMA -Xms512m -Xmx8g -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=240m 
-Djb.vmOptionsFile=/Users/Mercy/Library/Preferences/IdeaIC2017.1/idea.vmoptions -Didea.java.redist=jdk-bundled 
-Didea.home.path=/Applications/IntelliJ IDEA CE.app/Contents -Didea.executable=idea -Didea.platform.prefix=Idea -Didea.paths.selector=IdeaIC2017.1

其中用戶idea.vmoptions文件中的配置信息已經追加到JVM 啓動參數中:spa

-server -XX:+UseG1GC -XX:+UseNUMA -Xms512m -Xmx8g -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=240m

JVM 內存狀況

當前堆大小:   376,068 KB
最大堆大小: 8,388,608 KB
提交的內存: 524,288 KB
暫掛最終處理: 0對象
垃圾收集器: 名稱 = 'G1 Young Generation', 收集 = 58, 總花費時間 = 1.583 秒
垃圾收集器: 名稱 = 'G1 Old Generation', 收集 = 2, 總花費時間 = 1.930 秒

GC 算法已經由CMS切換成了G1算法!

爲何要選擇用戶idea.vmoptions文件

IDEA 官方的說明

Since version 14.0.0, the file /Applications/IntelliJ Idea XX.app/Contents/bin/idea.vmoptions or /Applications/IntelliJ Idea CE XX.app/Contents/bin/idea.vmoptions should be copied to ~/Library/Preferences/IntelliJIdeaXX/idea.vmoptions or ~/Library/Preferences/IdeaICXX/idea.vmoptions.

避免升級配置覆蓋

IntelliJ IDEA 版本升級時,除非用戶自行控制,默認狀況IDEA會將全局的idea.vmoptions文件覆蓋,所以,選擇用戶的idea.vmoptions文件可避免升級配置覆蓋。

相關文章
相關標籤/搜索