素小暖講JVM:Eclipse運行速度調優

本系列是用來記錄《深刻理解Java虛擬機》這本書的讀書筆記。方便本身查看,也方便你們查閱。app

欲速則不達,欲達則欲速!eclipse

這兩天看了JVM的內存優化,決定嘗試一下,對Eclipse進行內存調優。
本次使用的機器爲64位Win10系統,虛擬機爲Java HotSpot(TM) 64-Bit。硬件是臺式聯想電腦,Intel Pentium G630,8G物理內存。
1、Eclipse配置文件eclipse.ini工具

-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
--add-modules=ALL-SYSTEM
-Dcom.sun.management.jmxremote

初始設置指定了1.8版本的JDK,採用G1收集器,設置最大堆爲1024M以及開啓了JMX管理。性能

2、調優前的運行情況測試

寫了個eclipse啓動計時插件(將Jar包放到Eclipse的plugins目錄下,啓動Eclipse,能夠顯示Eclipse的啓動時間),記錄優化前的啓動時間,爲了保證測試結果的準確性,應該屢次啓動最後一次結果:優化

这里写图片描述

这里写图片描述

根據Visual GC和插件獲得以上的信息截圖,咱們能夠總結出原始配置下的啓動情況:
1.整個啓動耗時35秒。
2.垃圾收集總耗時1.126秒,其中Full GC 0 次,Minor GC 25 次,耗時1.126秒。
3.加載類19991個,共耗時38.131秒。
4.JIT編譯時間爲46.103秒(隨着時間流逝,編譯次數和時間不停增加)。
5.虛擬機1024MB的堆內存被分配爲,新生代當前分配63M,老年代187M。
總的來講啓動時間不算短,因此仍是有能夠調優的空間。ui


3、堆內存與Metaspace優化spa

打開VisualVM,直接查看內存曲線變化.net

这里写图片描述

这里写图片描述

從上圖看,不論是Java堆的曲線變化仍是Mwtaspace曲線變化,運做都徹底正常。
暫時找不到可優化的條件。插件

4、編譯時間和類加載時間的優化

看上圖調優前的運行情況,編譯時間和類加載時間應該是優化的重頭戲了。

这里写图片描述

先看類加載時間。因爲類加載須要進行字節碼驗證耗時,考慮到eclipse使用者衆多,它的編譯代碼咱們認爲是可靠的,不須要加載的時候再進行字節碼驗證,所以經過參數-Xverify:none禁止掉字節碼驗證過程也能夠認爲是優化手段。

这里写图片描述

这里写图片描述

在取消掉字節碼驗證以後,確實能夠看到Ecipse啓動速度有了必定的提高,但仍還不夠。
在類加載個數上,能夠看出初始情況加載了19991個類,能夠在eclipse中關掉不須要的啓動項。

这里写图片描述

这里写图片描述

可是編譯時間上目前沒找到太好的辦法~~~不知道怎麼解決,但願有高人指點

5、調整內存,減小垃圾收集次數

上面說到了編譯時間 類加載時間,那麼剩下的就是GC時間了。
能夠看出,這次Full GC被觸發了 4 次,Minor GC 8 次。

这里写图片描述

這次GC次數並不算多,可是從監視器中能夠看出,堆內存的使用不該該發生Full GC纔對。
爲了可以更好的看到eclipse啓動期間所作的GC收集操做,咱們加入配置-Xloggc:gc.log

这里写图片描述

能夠看出每次的Full GC 都是有Metadata GC Threshold形成的,也就是元空間引起的full GC。
從JDK8開始,永久代(PermGen)的概念被廢棄掉了,取而代之的是一個稱爲Metaspace的存儲空間。Metaspace使用的是本地內存,而不是堆內存,也就是說在默認狀況下Metaspace的大小隻與本地內存大小有關。每次Full GC,Metaspace都在調整閾值。所以,再加入-XX:MetaspaceSize=256M
可是仍能夠看到每次發生的Minor GC都是有新生代內存不夠所致使,所以,仍需提高配置
**-Xms2048m
-Xmx2048m
-Xmn512m**
本次調優完畢,只有3次Minor GC 耗時600毫秒。
可是啓動時間仍須要27秒。。。。。。。。。灰常尷尬。
目測時間仍是花費在了類加載與編譯上。須要更加進一步的優化。最後,貼出本次調優後的最終eclipse.ini配置
 

-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM

-Xms2048m
-Xmx2048m
-Xmn512m

-Dcom.sun.management.jmxremote
-Xverify:none
-Xloggc:gc.log
-XX:MetaspaceSize=256M

 

相關博文:

素小暖講JVM:第一章 走進Java,第二章 Java內存區域與內存溢出異常,第三章 垃圾收集器與內存分配策略

素小暖講JVM:第四章 虛擬機性能監控與故障處理工具總結,第五章 調優案例分析與實戰

素小暖講JVM:第六章 類文件結構,第七章 類加載機制,第八章 字節碼執行引擎

 

鳴謝:特別感謝做者周志明提供的技術支持!

相關文章
相關標籤/搜索