2010-06-23 76 views
3

我正在尋找一個工具,該工具列出了要運行的給定Java類的.class依賴關係。有點像Dependency Walker爲Windows應用程序所做的。Dependency Walker for Java?

我所知道的一些工具,但它們過於複雜或不完全匹配,包括

任何建議? TIA!

+5

你說有些不匹配,但是你沒有給出他們匹配的原因,或者你之後到底是什麼。 – 2010-06-23 00:57:55

+0

你需要更具體。 – 2010-06-23 01:24:02

+0

我有一個類接受明文密碼並返回相應的密文。它是一個簡單的CLI實用程序,並且根據供應商,需要26MB的定製JAR文件才能運行。 我負責識別和整理實際的類文件依賴關係,以便高效地使用空間。 像Dependency Walker這樣值得信賴的東西很快就會得到它的認可。 類似於Dependency Finder的嘗試,然後在我殺死該進程之前花費了2小時,CPU使用率達到100%。 希望幫助和感謝oppty提煉... – judoman 2010-06-23 03:46:55

回答

3

JVM只會加載程序中實際引用的類。因此,您可能無法通過修剪依賴關係來減少運行時內存消耗。如果您在縮小程序大小以簡化部署之後,可以使用它來檢測實際需要哪些類:只需運行啓用了VM的類加載日誌記錄的應用程序,並且日誌文件將列出所有使用的類。

例如,對於太陽JVM,您將添加VM參數-verbose:class,即啓動應用程序如下:

java -verbose:class -cp thejarfiles package.Main password 

和後處理日誌提取所有的類名。

(當然這種方法假設同一類用於程序,這可能是你的「簡單的CLI實用程序」的情況下每次執行)

+0

真棒,thx meriton。這很好,也暴露了我的邏輯缺陷。我默認了一個.class文件和一個DLL。糟糕:JAR就像一個DLL。你幫助我看到切割JAR就像切割一個DLL一樣。僅僅因爲某個DLL的入口點或JAR的.class沒有用於調用程序的特定「運行」,並不意味着它將不會在下次使用。例如,如果我在「簡單CLI實用程序」上啓用日誌記錄,則將加載之前未加載的日誌記錄類。 – judoman 2011-06-29 17:36:26

1

雖然你已經接受一個答案,我想貢獻一下你可能想看看CodePro AnalytiX - 一個允許代碼分析包括依賴性分析的Eclipse插件。