2012-10-09 195 views
4

我创建了一个Java程序,它从本地系统读取加密文件并执行一些处理。其实我有20个文件要读取,所以我使用线程机制来加速程序执行。与命令提示符相比,Eclipse中的程序执行速度非常慢

当我在Eclipse中运行程序时,需要30多分钟才能完成执行,而如果我制作可运行jar并使用命令提示符执行程序,则需要不到一分钟的时间。

为什么在Eclipse中运行程序比在命令提示符下运行需要更多时间?

+2

您是否有机会向System.out打印很多内容?因为这会立即解释你的观察。 –

+1

@MarkoTopolnik:是的,我使用了System.out,根据程序逻辑,我打印出5-10k次。这是一个问题吗? – Ran

+3

是的。删除打印输出,你会看到立即加速。 Eclipse的控制台视图比命令行中的“stdout”慢得多。 –

回答

6

Eclipse的控制台视图相比,命令行经常stdout是出了名的慢。每当程序中发生大量打印时,预计程序运行速度将比Eclipse慢得多。

但无论如何,除非您正在编写一个旨在通过Unix管道与其他程序集成的程序,否则应尽量减少打印,因为即使在命令行上它也会导致性能下降。

+0

是的,评论System.out已经加快了执行过程。谢谢。 – Ran

0

确保您在Eclipse中使用Run操作,而不是Debug,因为后者确实具有可测量的差异,尤其是在使用条件断点时。

但是,我记得使用调试产生的差异较小。

+1

我只使用Run动作而不使用调试机制。与命令提示符相比,我仍然看到了巨大的延迟。 – Ran

0

我刚刚为您做了一个实验,没有看到如此显着的差异。 我创建了一个计算sin()100000000次的类。 这个程序在eclipse下运行〜15秒,通过命令提示运行~14秒。

所以,这里是你的系统缓慢,我可以在我的头顶看到的原因:

  1. 要确保你不会在调试运行。使用运行选项,而不是调试。
  2. 确保你在eclipse下没有覆盖/监视开发工具。例如YourKit,Emma等
  3. 确保您的程序不会对控制台产生重要的打印。
  4. 检查你eclipse下运行时,有足够的堆内存
1

有一些典型的错误:

  • 也许你在调试模式下执行程序。

    尝试使用运行(绿色圆圈内播放符号),而不是调试(绿虫)

  • 也许你是一个不同的JVM执行程序

    看看在Project Properties->Java compilerWindow->Preferences->Java->CompilerWindow->Preferences->Java->Installed JREs

  • Eclipse JDT的Java控制台的输出和输入交互在性能上与标准控制台不同。捕获System.out

0

将jdk 6更改为jdk 7对我来说非常合适。 窗口 - >首选项 - > Java->已安装的JRE

相关问题