【eclipse】eclipse啓動優化&打印GC信息&重要的堆結構鏈接

eclipse啓動優化,終於不那麼卡了!html

網上找了好多都是myEclipse的優化的,跟eclipse有點區別,找了不少方法仍是不能讓這個eclipse(Version: Kepler Release)快起來,太費事了,終於給俺找到一個挺好用的方法,轉來的。java

首先了解下JVM中幾個相關的概念:
Xms:最小堆大小
Xmx:最大堆大小
Xmn:年輕代堆大小
Xss:每一個線程的堆大小
PermSize:初始持久代大小
MaxPermSize:最大持久代大小
通常Xms、Xmx設置相同,PermSize、MaxPermSize設置相同,這樣能夠避免伸縮堆大小帶來的性能損耗。併發

首先eclipse安裝根目錄下打開eclipse.ini,加上配置:app

1
2
3
-Xloggc:gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

目的是運行eclipse的時候能夠打出詳細gc過程。eclipse

啓動eclipse,而後打開gc.log一看,哇塞啓動一次就作了幾十次GC,包括很多次Full GC,着手優化……jvm

先解決Full GC的問題:性能

330.500: [GC [PSYoungGen: 525312K->78416K(612352K)] 525312K->78488K(2010624K), 0.1593021 secs] [Times: user=0.31 sys=0.03, real=0.16 secs] 
411.536: [GC [PSYoungGen: 603728K->87025K(612352K)] 603800K->127661K(2010624K), 0.2689894 secs] [Times: user=0.53 sys=0.03, real=0.27 secs] 
416.796: [GC [PSYoungGen: 150763K->87023K(612352K)] 191399K->134619K(2010624K), 0.1861188 secs] [Times: user=0.42 sys=0.00, real=0.19 secs] 
416.983: [Full GC [PSYoungGen: 87023K->0K(612352K)] [ParOldGen: 47596K->99447K(1398272K)] 134619K->99447K(2010624K) [PSPermGen: 82334K->82282K(524288K)], 1.3994638 secs] [Times: user=2.89 sys=0.05, real=1.40 secs] 
512.079: [GC [PSYoungGen: 17629K->96K(612352K)] 117076K->99543K(2010624K), 0.0077157 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
512.087: [Full GC [PSYoungGen: 96K->0K(612352K)] [ParOldGen: 99447K->98749K(1398272K)] 99543K->98749K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.9666690 secs] [Times: user=1.09 sys=0.00, real=0.97 secs] 
572.079: [GC [PSYoungGen: 16092K->64K(612352K)] 114842K->98813K(2010624K), 0.0094051 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
572.089: [Full GC [PSYoungGen: 64K->0K(612352K)] [ParOldGen: 98749K->98719K(1398272K)] 98813K->98719K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.7332189 secs] [Times: user=1.14 sys=0.02, real=0.73 secs] 
632.081: [GC [PSYoungGen: 15297K->64K(612352K)] 114016K->98783K(2010624K), 0.0081388 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
632.090: [Full GC [PSYoungGen: 64K->0K(612352K)] [ParOldGen: 98719K->98693K(1398272K)] 98783K->98693K(2010624K) [PSPermGen: 82297K->82297K(524288K)], 0.5883680 secs] [Times: user=1.76 sys=0.00, real=0.59 secs] 
692.098: [GC [PSYoungGen: 24107K->960K(612352K)] 122801K->99661K(2010624K), 0.0099850 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] 
692.108: [Full GC [PSYoungGen: 960K->0K(612352K)] [ParOldGen: 98701K->99492K(1398272K)] 99661K->99492K(2010624K) [PSPermGen: 82381K->82381K(524288K)], 0.7610910 secs] [Times: user=1.61 sys=0.00, real=0.76 secs] 
752.118: [GC [PSYoungGen: 20655K->32K(612352K)] 120148K->99524K(2010624K), 0.0244374 secs] [Times: user=0.02 sys=0.00, real=0.03 secs] 
752.143: [Full GC [PSYoungGen: 32K->0K(612352K)] [ParOldGen: 99492K->99303K(1398272K)] 99524K->99303K(2010624K) [PSPermGen: 82382K->82382K(524288K)], 0.6761450 secs] [Times: user=0.98 sys=0.00, real=0.68 secs] 

 

 

如上GC日誌能夠看出,Full GC主要是針對Tenured、Perm區(養老區和永久區)的GC,好那先調整Perm大小,指定充裕的持久代區域,eclipse.ini中加入:優化

-XX:PermSize=728m
-XX:MaxPermSize=728m

再次啓動看gc.log,Full GC沒有了,可是還有不少次普通GC,說明仍是須要進一步優化。
eclipse的初始堆大小分配得很小,所以不利於年輕代堆大小的分配,若是設置的年輕代堆大小Xmn大於最小堆大小Xms,eclipse將沒法啓動。
所以,將Xms調整爲728m,重啓動後觀察GC大幅減小。
最後調整Xmn,年輕代堆大小,通過反覆比較後,發現設置「-Xmn3072m」效果最優。
優化後的GC日誌:ui

1
2
3.203 : [GC  3.204 : [DefNew: 209776K->26176K(235968K),  0.0876304 secs] 209776K->27184K(498112K),  0.0876921 secs] [Times: user= 0.09 sys= 0.00 , real= 0.09 secs]
5.422 : [GC  5.422 : [DefNew: 235968K->12433K(235968K),  0.0989335 secs] 236976K->39296K(498112K),  0.0990229 secs]

在接近6秒的啓動時間內,eclipse總共只作了2次普通GC回收,怎麼樣效果明顯吧!
通常在不對eclipse進行相關設置的時候,使用eclipse老是會以爲啓動好慢,用起來好卡,其實只要對eclipse的相關參數進行一些配置,就會有很大的改善。
加快啓動速度
1.在eclipse啓動的時候,它老是會搜索讓其運行的jre,每每就是這個搜索過程讓eclipse啓動變慢了。(沒設置時,等2-3s出現進度條,設置後直接出現進度條)spa

只要在eclipse.ini中加入-vm的參數就能夠了
eclipse啓動優化,終於不那麼卡了!-飛網

2.取消全部啓動時要激活的插件(在用時激活也同樣)和其它的相關的在啓動時執行的操做。
eclipse啓動優化,終於不那麼卡了!-飛網

3.關閉自動更新
eclipse啓動優化,終於不那麼卡了!-飛網

減小jvm內存回收引發的eclipse卡的問題
這個主要是jvm在client模式,進行內存回收時,會停下全部的其它工做,帶回收完畢纔去執行其它任務,在這期間eclipse就卡住了。因此適當的增長jvm申請的內存大小來減小其回收的次數甚至不回收,就會是卡的現象有明顯改善。

主要經過如下的幾個jvm參數來設置堆內存的:

-Xmx512m 最大總堆內存,通常設置爲物理內存的1/4
-Xms512m 初始總堆內存,通常將它設置的和最大堆內存同樣大,這樣就不須要根據當前堆使用狀況而調整堆的大小了
-Xmn192m 年輕帶堆內存,sun官方推薦爲整個堆的3/8
堆內存的組成 總堆內存 = 年輕帶堆內存 + 年老帶堆內存 + 持久帶堆內存
年輕帶堆內存 對象剛建立出來時放在這裏
年老帶堆內存 對象在被真正會回收以前會先放在這裏
持久帶堆內存 class文件,元數據等放在這裏
-XX:PermSize=128m 持久帶堆的初始大小
-XX:MaxPermSize=128m 持久帶堆的最大大小,eclipse默認爲256m。若是要編譯jdk這種,必定要把這個設的很大,由於它的類太多了。

個人eclipse.ini配置(12g內存的筆記本):

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms3072m
-Xmx3072m
-XX:PermSize=728m
-XX:MaxPermSize=728m
-XX:+UseParallelGC
-XX:+DisableExplicitGC
-Xloggc:gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

 


還有其它的相關參數能夠看看下面的參考材料,頗有啓發的:
-XX:+UseParallelGC 使用併發內存回收
-XX:+DisableExplicitGC 禁用System.gc()的顯示內存回收

eclipse相關設置來來減小卡的現象
1.關閉自動構建。在啓用時,每保存一下,eclipse就會自動爲咱們構建整個項目,這樣對於大的項目來講,每次保存時都會形成很卡。其實自動構建徹底沒有必要,只要保證在運行前構建一次就ok了,eclipse也會在運行前自動爲咱們構建,因此關閉是最明智的選擇。
eclipse啓動優化,終於不那麼卡了!-飛網

2.關閉拼寫檢查設置
eclipse啓動優化,終於不那麼卡了!-飛網

參考材料
jvm啓動參數大全:http://www.blogjava.net/midstr/archive/2008/09/21/230265.html
jvm結構的一些知識(其中的堆的構成):http://hllvm.group.iteye.com/group/wiki/2905-JVM
jvm堆與GC知識:http://ruijf.iteye.com/blog/1028455
eclipse啓動調優:http://www.iteye.com/topic/756538eclipse自帶的help contents(搜索"Running Eclipse"能夠找到啓動相關的配置)

相關文章
相關標籤/搜索