我创建了一个Java程序,它从本地系统读取加密文件并执行一些处理。其实我有20个文件要读取,所以我使用线程机制来加速程序执行。与命令提示符相比,Eclipse中的程序执行速度非常慢
当我在Eclipse中运行程序时,需要30多分钟才能完成执行,而如果我制作可运行jar并使用命令提示符执行程序,则需要不到一分钟的时间。
为什么在Eclipse中运行程序比在命令提示符下运行需要更多时间?
我创建了一个Java程序,它从本地系统读取加密文件并执行一些处理。其实我有20个文件要读取,所以我使用线程机制来加速程序执行。与命令提示符相比,Eclipse中的程序执行速度非常慢
当我在Eclipse中运行程序时,需要30多分钟才能完成执行,而如果我制作可运行jar并使用命令提示符执行程序,则需要不到一分钟的时间。
为什么在Eclipse中运行程序比在命令提示符下运行需要更多时间?
Eclipse的控制台视图相比,命令行经常stdout
是出了名的慢。每当程序中发生大量打印时,预计程序运行速度将比Eclipse慢得多。
但无论如何,除非您正在编写一个旨在通过Unix管道与其他程序集成的程序,否则应尽量减少打印,因为即使在命令行上它也会导致性能下降。
是的,评论System.out已经加快了执行过程。谢谢。 – Ran
确保您在Eclipse中使用Run操作,而不是Debug,因为后者确实具有可测量的差异,尤其是在使用条件断点时。
但是,我记得使用调试产生的差异较小。
我只使用Run动作而不使用调试机制。与命令提示符相比,我仍然看到了巨大的延迟。 – Ran
我刚刚为您做了一个实验,没有看到如此显着的差异。 我创建了一个计算sin()
100000000
次的类。 这个程序在eclipse下运行〜15秒,通过命令提示运行~14秒。
所以,这里是你的系统缓慢,我可以在我的头顶看到的原因:
有一些典型的错误:
也许你在调试模式下执行程序。
尝试使用运行(绿色圆圈内播放符号),而不是调试(绿虫)
也许你是一个不同的JVM执行程序
看看在Project Properties->Java compiler
,Window->Preferences->Java->Compiler
和Window->Preferences->Java->Installed JREs
Eclipse JDT的Java控制台的输出和输入交互在性能上与标准控制台不同。捕获System.out
将jdk 6更改为jdk 7对我来说非常合适。 窗口 - >首选项 - > Java->已安装的JRE
您是否有机会向System.out打印很多内容?因为这会立即解释你的观察。 –
@MarkoTopolnik:是的,我使用了System.out,根据程序逻辑,我打印出5-10k次。这是一个问题吗? – Ran
是的。删除打印输出,你会看到立即加速。 Eclipse的控制台视图比命令行中的“stdout”慢得多。 –