1. 程式人生 > >出現GC overhead limit exceeded 的解決方案

出現GC overhead limit exceeded 的解決方案

當我在使用MyEclispe IDE建立Maven專案的時候出現  "An internal error occurred during: “Build Project”. GC overhead limit exceeded",剛開始以為我clean一下,然後重啟MyEclipse就可以了,後來發現並不是這樣。既然出錯就要去尋找問題的根源,那麼問題出在哪裡呢?

        在解決這個問題的時候,我尋找了一些資料,發現GC overhead limt exceed檢查是Hotspot VM 1.6定義的一個策略,通過統計GC時間來預測是否要OOM了,提前丟擲異常,防止OOM發生。Sun 官方對此的定義是:“並行/併發回收器在GC回收時間過長時會丟擲OutOfMemroyError。過長的定義是,超過98%的時間用來做GC並且回收 了不到2%的堆記憶體。用來避免記憶體過小造成應用不能正常工作

        這時候就需要認真的去考慮了,既然是配置記憶體出了問題,那麼就應該去到相應的配置檔案下面去找,MyEclispe IDE的相關記憶體配置檔案在myeclispe.ini,當然,在我們開啟的時候就會清楚的看到下面的這一段程式碼:

 

[html]  view plain  copy  
  1. <span style="background-color: rgb(51, 255, 51);">#utf8 (do not remove)  
  2. -startup  
  3. plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar  
  4. --launcher.library  
  5. plugins/org.eclipse.equinox.launcher.i18n.win32.win32.x86_64_3.2.0.v201103301700  
  6. -vm  
  7. binary/com.sun.java.jdk7.win32.x86_64_1.7.0.u45/bin/javaw.exe  
  8. -install  
  9. D:\mytools\MyEclipse  
  10. -vmargs  
  11. -Xmx768m  
  12. -XX:MaxPermSize=320m  
  13. -XX:ReservedCodeCacheSize=64m  
  14. -Dosgi.nls.warnings=ignore</span>  

可以很清楚的看到有一段 -Xmx768m 的配置,它是作為最大佔有記憶體,當出現剛剛的錯誤的時候說明當前已經超過這個設定值,所以我們可以將這個最大佔有記憶體做下修改,調整為1024m,目前這個設定值已經足夠使用了,當然有的人會說將" -XX:MaxPermSize",同樣也設定為1024m或者更大的時候,但是我感覺沒必要,當我們在編譯檔案的時候就讓它一直處在最大佔有記憶體,往往會出現程式卡住的現象。所以一切還是要根據具體情況做具體分析以及解決,達到最佳的效果。