出現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
- <span style="background-color: rgb(51, 255, 51);">#utf8 (do not remove)
- -startup
- plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
- --launcher.library
- plugins/org.eclipse.equinox.launcher.i18n.win32.win32.x86_64_3.2.0.v201103301700
- -vm
- binary/com.sun.java.jdk7.win32.x86_64_1.7.0.u45/bin/javaw.exe
- -install
- D:\mytools\MyEclipse
- -vmargs
- -Xmx768m
- -XX:MaxPermSize=320m
- -XX:ReservedCodeCacheSize=64m
- -Dosgi.nls.warnings=ignore</span>
可以很清楚的看到有一段 -Xmx768m 的配置,它是作為最大佔有記憶體,當出現剛剛的錯誤的時候說明當前已經超過這個設定值,所以我們可以將這個最大佔有記憶體做下修改,調整為1024m,目前這個設定值已經足夠使用了,當然有的人會說將" -XX:MaxPermSize",同樣也設定為1024m或者更大的時候,但是我感覺沒必要,當我們在編譯檔案的時候就讓它一直處在最大佔有記憶體,往往會出現程式卡住的現象。所以一切還是要根據具體情況做具體分析以及解決,達到最佳的效果。