如何确定Java程序使用哪些类?

时间:2009-01-24 04:44:31

标签: java optimization jar dependencies

是否有任何工具可以列出应用程序有效使用哪些类,哪些更好,甚至更好地自动修剪JAR库以仅提供引用和使用的类?

4 个答案:

答案 0 :(得分:9)

请记住,正如halting problem所证明的那样,您无法确定某个特定类是否使用过。至少在任何中等复杂的应用程序上。这是因为类不仅仅是在编译时绑定,而是可以加载:

  • 基于XML配置(例如Spring);
  • 从属性文件加载(例如JDBC驱动程序名称);
  • 动态添加注释;
  • 由于外部输入而加载(例如用户输入,来自数据库或远程过程调用的数据);

所以只看源代码是不够的。话虽这么说,任何合理的IDE都会为您提供依赖性分析工具。 IntelliJ当然可以。

您真正需要的是运行时检测应用程序正在执行的操作,但即使这样也无法保证。毕竟,由于奇怪的输入组合,特定的代码路径可能会在1000万次运行中出现,因此无法保证您已被覆盖。

这样的工具确实有一些价值。您可能希望查看Emma之类的内容。像Yourkit这样的分析器可以为您提供代码转储,您也可以对其进行分析(尽管这不会很好地获取瞬态对象)。

我个人认为除了IDE告诉你的东西之外没什么价值:删除未使用的JAR。比这更细致,只是要求很少甚至没有收获的麻烦。

答案 1 :(得分:4)

是的,你想要ProGuard。它是一个完全免费的Java代码缩减器和混淆器。它易于配置,快速有效。

答案 2 :(得分:3)

您可以尝试JarJar http://code.google.com/p/jarjar/

它修剪了jar依赖项。

答案 3 :(得分:0)

对于大多数情况,只需使用javac即可轻松完成。

删除现有的类文件。使用您的输入类名称调用javac。它将编译必要的类,但不再编译。完成工作。