2012-10-09 194 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

相關問題