Eclipse启动后报“Decoration Calculation”并异常崩溃问题分析及解决办法
【我的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-选择项目本地路径”的方式;
如果以上方式仍未能解决你的问题,请反馈出来并提供现象说明。或者你解决的,也请你留言分享出来。:)