2010-06-23 46 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插件。