影響

2012-06-11 110 views
8

我約可找出未使用 JAR文件的工具,比如在這裏看了這麼多Q &答:影響

  1. loosejar
  2. Classpath Helper

我的問題是,在編譯時或運行時,類路徑中是否存在未使用JAR的影響(如將類加載到內存,性能等)?問題適用於作爲獨立程序和Web服務器(Apache Tomcat)運行,儘管我最初只考慮過獨立程序。

注意:我正在運行JDK 6u32(64位)。

回答

8

是否有類路徑在編譯時或運行時具有未使用的JAR的任何影響(如類裝載到存儲器中,性能等)?

這會有一個小的影響。當類加載器(或編譯器的等價物)啓動時,它必須讀取每個JAR文件的索引以找出每個JAR中的類。如果在類路徑中有不必要的JAR,則類加載器需要做更多工作,並且(至少暫時)會使用更多內存來緩存索引。

這適用於各種Java應用程序。

您沒有問的問題是影響是否顯着。答案是「一般不會」......但是在班級路徑上的「無用的東西」越多,影響就越大。

+0

因此,*小的影響*適用於編譯時和運行時? – Gnanam

+0

是的......在這兩種情況下。在這兩種情況下通常都不值得擔心。 –

0

是的,它有影響 - 因爲JVM在CLASSPATH的JAR中查找必要的類。保留密封的JAR也是有意義的,以告訴JVM不要在其他JAR中查找相關的類。

P.S .: javac也是一個java程序,用於記錄。

+0

然而,JAR文件索引的緩存意味着在額外的地方查找的開銷很小。 –

3

主要問題不在於性能,因爲成本相對較小,僅適用於加載新類。主要問題是可維護性。例如,當一個庫需要升級時,你可能會浪費大量的時間來測試應用程序,但仍然可以與新版本一起工作,只是爲了發現該庫沒有被使用。 (假設你有一個新的庫,它需要一個你已經使用過的庫的更新版本)

+0

我無法清楚地理解這一點 - 「當圖書館需要升級時,您可能會浪費大量時間來測試應用程序仍然適用於新版本,只會發現圖書館未被使用。你能澄清一下嗎? – Gnanam

+1

假設你有log4j版本1.1,但你想使用庫X因爲某些原因需要log4j1.2。您不能直接在版本1.2中下載,直到您確定它不會破壞您的應用程序。所以你使用1.2重新測試你的應用程序,看看它是否仍然有效並浪費大量時間,因爲你甚至不使用log4j。如果你只有實際使用的庫,這不會是一個問題。 –