Eclipse啟動後報“Decoration Calculation”並異常崩潰問題分析及解決辦法,eclipse崩潰
【我的Segmentfault原文】https://segmentfault.com/a/1190000007903170
一、問題現象
我像往常一樣匯入ClearCase(類似SVN)中匯入公司新的工程進行開發,匯入後沒多久Eclipse就開始彈框報錯,報錯如下:
這時,你可以選擇關閉對話方塊,但是緊接著Eclipse會彈出新的對話方塊(大概意思是軟體運行出錯,需要馬上關閉Eclipse)。當然你仍然可以關閉該對話方塊,可是很快你會發現系統有些卡頓,開啟背景工作管理器,你會發現實體記憶體基本耗盡。再查看進程,你會發現一個名為javaw.exe的進程記憶體佔用賊高,而且還在持續增長。
二、問題分析1、第一次出現問題
從報錯的內容來看,“Decoration Calculation”(裝飾的計算)通過中文翻譯的字面意思是沒法明白,查了半天資料也沒搞明白是什麼模組的問題,但網上出現報錯並提供解決辦法的人不在少數,貼幾個出來。
1、Eclipse:An internal error occurred during: "Build Project". GC overhead limit exceeded
2、(Eclipse) An internal error occurred during: “Decoration Calculation”. java.lang.StackOverflowError in Ubuntu 14.10
3、解決An internal error occurred during: “Decoration Calculation”
問題矛頭基本指向Java虛擬機器記憶體設定過低(另一個報錯內容“Java heap space”也說明可能存在此問題),建議基本都是修改Eclipse.ini設定檔,調高JVM的可用記憶體,滿心歡喜的以為就此問題可以解決,不好意思,無論你重啟多少次Eclipse,再把項目重新多匯入多少次,問題仍然存在。
一開始我還以為是可用記憶體設定太小了,不斷把值調大,後面索性調到1024m,Eclipse直接就啟動不了,然後彈出一個提示框,大概意思就是這值你設定得太隨性,乖乖改回去(開個玩笑:)),反正意思就是這個值不能隨便設定,我調到臨界的700m多樣子,還是不行。
這樣來來回回折騰了兩天,後面我就果斷放棄,靜下來想想。做得第一件事就是先Close Project,很快發現Eclipse好了,基本可以排除Eclipse的問題,但是我匯入的項目哪出問題了呢?重點是其他同事匯入都沒問題...
再和同事的Eclipse介面反覆對比,發現一個細節,匯入項目的表徵圖不相同,他的是(Web項目),而我的是(Java項目)。一問同事,這個項目是Web工程,瞬間有種淚崩的感覺,要是早知道這點該多好...
基本確定是匯入的問題了,那麼我就開始反覆的刪除再匯入,試了那麼N次後就成功了(運氣夠背,人夠衰),問題總算解決了。當然,還有一個比較暴力的解決辦法(不推薦),就是手動把Java項目改成Web項目(網上教程很多,就不列舉出來了)。
2、第二次出現問題
更不幸的是,後面有一次匯入公司新的Java工程,也出現同樣的問題了。更悲催的是,上次匯入的Web項目又莫名其妙地識別成了Java項目,這問題沒完沒了...
後面想想,好像都是因為從ClearCase(類似SVN)匯入引起的,於是我就把兩個項目都先刪除,然後通過import手動匯入(Existing Projects into Workspace)。靜靜地等上幾分鐘,發現Eclipse依然安靜地躺在那裡,不哭不鬧,看來問題是解決了!
後面再回想,ClearCase(類似SVN)和原生Eclipse的相容性估計也是一個問題。為什麼這麼說呢?ClearCase是Rational公司給我們定做的,另外Eclipse也是一個定製的版本(暫簡稱VEclipse),用VEclipse從ClearCase匯入工程沒有問題。由於工作原因,我需要臨時用原生Eclipse從ClearCase匯入工程,才出現哪些問題,不過還好問題都暫時解決了。
三、解決辦法
因為問題解決的過程卻是有點曲折心酸,所以前面的問題分析有點長,簡要說明一下解決辦法,具體如下:
1、確認Eclipse的匯入識別情況。先確認匯入工程是Web項目還是Java項目,然後匯入後觀察表徵圖(/)是否正確;
2、刪除再匯入嘗試。確認識別正確,仍然出現問題,嘗試將項目從Eclipse刪除(不要同時勾選從本地硬碟刪除),然後再匯入,反覆試三四次不行,就不用再試了;
3、import手動匯入項目。如果你的工程使用SVN管理的,不要使用“import-Checkout Projects from SVN-從SVN庫中匯入”的方式,而是用“import-Existing Projects into Workspace-選擇項目本地路徑”的方式;
如果以上方式仍未能解決你的問題,請反饋出來並提供現象說明。或者你解決的,也請你留言分享出來。:)