2012-01-04 97 views
38

我有疑問,Java代碼中未使用的導入和未使用的對象是否會產生任何性能影響?未使用的導入和對象是否會對性能產生影響

假設一個對象初始化並沒有用過,會發生什麼? 什麼是未使用的導入

+7

http://stackoverflow.com/questions/979057/any-reason-to-clean-up-unused-imports-in-java-other-than-reducing-clutter – 2012-01-04 08:39:10

+0

爲什麼不使用Eclipse'Organize Imports'函數? – 2012-01-04 08:40:20

+0

或者在IntelliJ或NetBeans或任何體面的IDE中組織導入。 – 2012-01-04 08:41:31

回答

39

它是一種非常常見的問題的成本。

最喜歡的性能問題,最好的辦法是寫最清晰,最簡單的代碼就可以,因爲這提高了代碼的可維護性,並幫助確保其執行即使改變還算不錯。 (Clever/Obtuse/Needlessly Verbose代碼可以快速運行,但由於它只是由凡人改變它可以變得更慢)

未使用的導入對編譯器有微不足道的影響,但在字節中沒有導入代碼或運行時。

未使用的對象可以被優化掉,但其最好避免這些,因爲他們幾乎總是導致一些性能的影響,但更重要的是使閱讀和維護你的代碼更加困難。

+1

我們還可以在編譯過程中提到一些額外的CPU滴答。更多代碼 - 需要更多時間進行優化和編譯 – disorder 2012-01-04 08:46:21

+0

感謝您的答覆!你有這個信息的來源,我可以參考? (除了這個答案...) – 2016-09-27 16:24:57

+1

@EduardoBezerra你可以從byte cide規範中看到,不會使用導入,因此它們可以在運行時產生效果。 – 2016-09-27 19:02:47

11

未使用的進口都在運行時對性能沒有影響。它純粹是一個命名空間機制。儘管如此,您應該始終只導入您需要的可讀性,並避免名稱空間衝突,這是令人討厭的。

除代碼的可讀性和代碼的可維護性之外,通過整理導入可能會加快java代碼的編譯(但不會顯着),但運行時性能不會受到影響,因爲生成的字節代碼不會影響不整齊的導入。生成的字節代碼保持不變。

+1

請提供「未使用的進口沒有性能影響」參考 – RanRag 2012-01-04 08:52:36

+1

更確切地說,在RUNTIME沒有性能影響。但是,根據進口數量的不同,編譯速度可能較慢,但不明顯。 – Frankline 2012-01-12 12:42:14

+0

爲什麼不明顯?當然,這取決於你正在進行多少次編輯?例如 - 我們有一個持續編譯多個項目的CI構建服務器 - 因此,即使是最小的優化,也會稍微提高編譯性能,對吧? – ryan 2013-06-05 12:40:14

3

雖然在編譯中的影響很小,但是在部署中的影響可能很糟糕,我剛剛遇到了一個未使用的導入,它需要單獨的庫女巫成爲maven依賴項,但未找到希望的進一步傳遞依賴項問題,戰爭無緣無故,在webapp類加載器中添加了一個多餘的jar。

相關問題