2011-06-07 39 views
2

我们在其中一个应用程序中包含一个包含所有代码的eclipse项目。我认为这是相当数量的代码 - 不是一个小项目,但也不是一个巨大的代码。我跑了一小检查,并得到:当项目包含很多链接时,Eclipse会变得很慢

找到< 4245>代码文件
总计的代码< 421557>线

这种检查包括任何代码行不为空或只是含{}

因此,这不是一个巨大的项目 - 然而,.project定义了许多链接来掩盖真实的目录结构,为Package Explorer创建不同的视图 - 所以项目会更有意义。

问题是eclipse在某些区域工作速度很慢。
例子:在工作区

  • 查找引用(按Ctrl + + ) - 相比,我通过jadclipse或在此幅度
  • 反编译工作在之前的项目需要很长的时间JDEclipse可能需要多达1分钟 - 导致eclipse在标题栏上显示可爱的(不响应)后缀。从eclipse以外反编译的相同代码不到一秒钟。
  • JUnit测试执行 - 启动执行需要10秒以上,其中eclipse似乎没有做任何重要的事情。

任何想法,为什么会发生这种情况,如果它可能是一个“复杂”的项目结构的结果?使用eclipse 3.6,没有安装许多插件。

编辑:

使用resmon最终给我的问题。我注意到eclipse一直试图连接到网络共享 - 它并不需要太多的CPU或IO,但它仍然在那里。 当检查.classpath文件我注意到了这一点:

<classpathentry kind="lib" path="build_class" sourcepath="some share using samba ..."> 

我们引用的份额甚至不是一个正确的路径,但是这可能导致大量的开销在每一个活动。

卸下sourcepath附件,并把它当作:

<classpathentry kind="lib" path="build_class"> 

立即解决的问题。由于我们以任何方式使用反编译插件,所以我们没有受到这种改变的伤害。

回答

1

这是典型的有一个或多个资源瓶颈的情况。

您将需要使用操作系统工具调查Eclipse正在等待什么(任务管理器和perfmon对于Windows非常有用),如果这无助于使用Oracle 6 JDK中的jvisualvm调查Eclipse本身。

您很可能会发现系统正在等待底层硬盘。这可能有几个原因,其中一些是:

  • Eclipse是一个很大的程序。操作系统可能需要将其中的一部分交换到磁盘。对于Eclipse来说,这会破坏性能。真!
  • Eclipse需要批次磁盘访问。如果你的磁盘速度很慢,或者(恐怖的恐怖)过于激进的反病毒程序,这也会导致性能下降。如果操作系统有足够的备用RAM,它可以缓存内存中的文件,从而获得更好的性能。

如果是这样,请获得更多RAM。

如果底层系统没问题,但Eclipse本身的速度非常慢(但其他Java程序运行良好),那么请参阅jvisualvm内存使用情况如何随着时间的推移而变化,以及如果您有很多频繁的垃圾回收您需要等待,您可能需要为JVM分配更多内存。这在eclipse.ini文件中完成。

+0

另外,如果您使用Windows和磁盘是瓶颈,我相信使用ReadyBoost与适当的USB密钥可以提高性能。 – 2011-06-07 10:00:43

+1

如果仅限于单个项目,该怎么办?我尝试了几个其他项目(单独的工作空间),他们都没有受到这个问题的困扰。你仍然认为'jvisualvm'可以提供帮助吗? – RonK 2011-06-08 19:32:46

+0

如果它只是一个单独的项目,您会发现有不同的_inside_Eclipse触发它。我的猜测是,jvisualvm会显示Eclipse JVM的行为如上所述。 – 2011-06-08 19:35:35