当前位置: 首页 > 面试题库 >

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

夏长卿
2023-03-14
问题内容

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


问题答案:

请记住,正如停机问题所证明的那样,您不能肯定地说某个特定类已使用或未使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:

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

因此,仅查看源代码是不够的。话虽如此,任何合理的IDE都会为您提供依赖性分析工具。IntelliJ当然可以。

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

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

就个人而言,我发现IDE不会告诉您任何价值:删除未使用的JAR。比这更细粒度只是索要麻烦,几乎没有收获。



 类似资料:
  • 问题内容: 现有应用程序的类路径中有大量的JAR文件。一定要确保最初添加了所有JAR。显然没有使用某些JAR,我们已经删除了其中一些不需要的JAR,而没有引起任何问题。 如何确定正在使用哪些JAR,哪些是不需要的(除尝试和错误方法外)? 问题答案: Tattletale是一个很好的工具。它对字节码起作用,因此有可能通过反射使用某些类,而这些类不会出现在报告中。 这里( 链接不再有效 )是示例报告。

  • 假设我有一个卷,我知道它的名称或id。 我想确定使用卷的容器列表(它们的名称或id)。 我可以使用什么命令来检索这些信息? 我认为它可以存储在docker volume inspect的输出中

  • 我正在使用Hazelcast Imap接口以分布式方式锁定项目,而不是将项目放在map中,我只是调用lock方法,它似乎有效,但我不知道如何查询哪些项目当前被锁定,因为项目在map中不可用。有没有方法可以查询Hazelcast锁定的键?下面是示例代码:public void testMap_DistributedLock(){final Config hazelcastConfig=new Con

  • 我没有指定任何GC,我认为我的JVM默认情况下没有启用任何GC。 当然,我知道 OpenJDK8 默认使用并行GC,但我认为它应该可以通过命令行打印,如下所示: < code > Java-XX:print flags final | grep Use | grep GC 我期望输出包含< code > bool UseParallelOldGC = true { product } ,但它不是:

  • 我目前有一个数字列表,我想知道这些数字中的哪些在一定范围内,以及它们在列表中的位置是什么。 我对巴黎相当陌生,所以我不知道该怎么做。 举一个简单的例子来说明我在做什么: 查找位于 0.05 和 0.15 范围内的数字 1 到 20 的逆函数 我列了一个清单,像这样: 从这里,我想要所有i的列表,以便A[i]在该范围内。 但我不知道如何从这里开始。我尝试了一些简单的if/for语句,但这些都不起作用