我在Eclipse中运行一个大型JUnit插件测试套件时遇到了一个奇怪而又有压力的问题。当我尝试重新运行刚刚执行的JUnit插件套件时,Eclipse会在最终唤醒并启动之前挂起很长一段时间。有时可能需要5分钟,并随着套件的大小而增加。在视觉上,它显示为GC清理,除了我有足够的GC空间可用(400 MB可自由分配)。
必须删除的工作区大小远低于1 GB,并且文件不会太多 - 绝对少于20,000。
当我等待新的跑步开始时,我决定手动杀死explorer.exe
以查看它是否有任何效果。令人惊讶的是,Eclipse立即脱离了冻结并正常运行。
这让我觉得Windows在某种程度上干扰了这些工作区文件的删除。但它们并没有被放入回收站。工作区位于C:
,我认为它超出了任何工作空间/域的范围。有什么想法吗?
编辑:我使用的是Eclipse 3.5.2,JRE 1.6.02,JUnit 3.没什么不寻常的。我很确定这不是内存泄漏;它从未因OOM异常而崩溃(如果确实如此,我可以使用MemoryAnalyzer轻松分析它。)
在冻结时进行进一步调查,确实是因为删除了文件。工作区的初始大小约为20,000个文件/ 5000个目录,可用的大小为100 MB。我可以看到被删除的文件,最终工作区是空的,Eclipse没有冻结。
我已就此问题提交了Eclipse Bug 311814。
答案 0 :(得分:1)
您可以尝试使用generating a Head Dump来获取Memory Analyzer到analyze等模块。
这样,您可以看到哪种线程正在等待什么,例如this bug(可能是fork issue)。