1. 程式人生 > >eclipse經常未響應優化

eclipse經常未響應優化

Eclipse無響應,假死的解決辦法,網上通常都是調整eclipse的配置檔案,修改jre佔用的記憶體等等,實際發現效果不明顯,很多時候假死都是在編輯js和jsp的時候發生的,後來在網上找到了幾個解決辦法,都不見效,後來看eclipse日誌發現是由於應用的JS庫過於臃腫龐大,且有兩個同樣的js應用,每次eclipse進行jsDOM生成時,就會觸發假死,把引用的多餘的js庫去掉就好了。下面是幾個網上的解決方案,我感覺都只能解決一方面的問題,真正解決eclipse的假死問題,還得看eclipse在workspace下的日誌。解決js庫過於龐大還可以通過將下面兩個引數刪除來解決,讓eclipse不在啟動時,自動校驗js

開啟專案的.project檔案,將
<buildCommand>
                        <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
                        <arguments>
                        </arguments>
</buildCommand>
跟<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
這兩個地方刪掉即可。。。。。

其他網上的幾個方法:

方法一:更換更高版本的jre,有時候有的jre版本造成eclipse假死,更換更高版本的jre有時會解決問題              

 在Eclipse——Window——Preferences——Java——Installed JREs下

       請確保你上面顯示的是JDK資料夾裡面的JRE,而不是與JDK在同一資料夾的那個目錄,同時你在新建JRE時要把下面的jar檔案加入進來:(點選Add External JARS即可加入JAR檔案)         
               D:\Program Files\Java\jdk1.5.0_06\jre\lib下的 *.jar;以及

               D:\Program Files\Java\jdk1.5.0_06\jre\lib\ext下的*.jar.

方法二:

工程目錄右鍵->Properties->Java Build Path->Libraries 下面

找到 javax.servlet.jar 和 javax.servlet.jsp.jar

下面選擇Javadoc location ,

點選Edit,去掉Java location path的值或者指定一個本地地址。

-----------------------------------------------------------------------------

產生此現象的原因是每次開啟提示時Eclipse會自動訪問網路上的API Doc,網束慢的情況下就會有假死現象。

============================eclipse效能調優========================

最近,Eclipse(Eclipse-JEE3.5)執行十分緩慢(可能外掛安裝過多),因此,得到了個機會調優一下,以便提高工作效率
下圖是未經任何調整eclipse的gc情況(使用jvisualvm命令,安裝visual gc外掛)

在終端輸入:jvisualvm執行後,工具->外掛->visual gc,安裝。

啟動eclipse後,在終端執行: ps -ef | grep eclipse,然後在jvisualvm的應用程式一欄選擇eclipse pid的程式雙擊,即可到visual gc上檢視圖表。

-Xms1024m
-Xmx1024m

對應的為圖中的 Old 區;

-XX:NewSize=768m
-XX:MaxNewSize=768m

對應的為圖中的 Eden 區;

-XX:PermSize=200m
-XX:MaxPermSize=200m

對應的為圖中的 Perm區;


 
從圖中可以看出,僅啟動過程就有38次young gc,11次full gc
為了檢視gc細節,在eclipse.ini中加入如下引數:
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:D:/soft/eclipse-jee/gc.log
gc的內容如下:


 
從gc日誌中可以看出:
(1)young區開始為4928K,持續的不夠,因此造成不斷的young gc
(2)full gc時,old區的空間增大擴容,因此old區空間也不夠
為了防止這種情況發生,加入以下引數:
-Xms768m
-Xmx768m
-XX:NewSize=512m
-XX:MaxNewSize=512m
此次調整後結果如下圖:


 
從圖中可以看出,young gc沒有了,但為啥還11次full gc呢?
以下是此次gc的日誌:


 
從gc.log中,可以看出,是因為perm區的沒有空間了,才導致的full gc,於是將perm區增大並固定大小
加入以下引數:
-XX:PermSize=96m
-XX:MaxPermSize=96m
此次調整後結果如下:


 
可以看出,沒有full gc了,而且young gc只有一次,有了一定的效果了
啟動時gc的問題解決了,現在來看其他問題:


 
從圖中可以看出,如果classloader載入class的時間能快些,應該也會節省些時間
加入以下引數:
-Xverify:none(關閉Java位元組碼驗證,從而加快了類裝入的速度)


 
將上兩圖比較
第一個:平均每個類的載入時間為,54.615/10950 = 0.0049876712328767s
第二個:平均每個類的載入時間為,34.498/9484 = 0.0036374947279629s
可以看出,多少是有一些效能上的提高的
考慮到eclipse長時間執行,其他可能調節的有以下幾點:
(1)關閉System.gc()
(2)提高eclipse中某些程式碼的JIT編譯
(3)優化垃圾收集器,以減少垃圾收集造成應用無響應的時間
對於(1),加入以下引數:
-XX:+DisableExplicitGC
對於(2),會影響啟動速度,但由於eclipse是長時間執行,因此此優化是必要的:
-XX:CompileThreshold=100(方法呼叫多少次就會被編譯成本地機器碼)


 
可以看出,編譯方法的數量和時間明顯增加
對於(3),換用CMS收集器應該比序列收集器要好,加入以下引數:
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
至此,調優結束

總結一下加入的引數如下:
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:D:/soft/eclipse-jee-galileo-win32/eclipse/gc.log
-Xms512m
-Xmx512m
-XX:NewSize=256m
-XX:MaxNewSize=256m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:+DisableExplicitGC
-XX:CompileThreshold=100
-Xverify:none
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80

參考如上內容用的eclipse.ini:

1、小記憶體,執行情況不錯

-clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx512m
-XX:NewSize=256m
-XX:MaxNewSize=256m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:+DisableExplicitGC
-XX:CompileThreshold=100
-Xverify:none
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80

2、大記憶體

-clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms1600m
-Xmx1600m
-XX:NewSize=800m
-XX:MaxNewSize=800m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:+DisableExplicitGC
-XX:CompileThreshold=100
-Xverify:none
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80

3、大記憶體,自己弄的,可能優化的不合理

-clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms40m
-Xmx2048m
-Xss1024k
-Xss1024k
-XX:+DisableExplicitGC
-XX:CompileThreshold=100
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
-Xverify:none

轉自http://blog.csdn.net/angle_birds/article/details/19609011