当我查看binary class file时,我可以轻松找到需要加载的其他类以便使用此类吗?
作为一种“目录”,我只能看到带类条目的常量池表 。第1和第2个条目具有特定含义,直接在我发现的and elsewhere的JVM规范中进行了解释。但是该表中的其他条目此类文件使用的其他类的列表?那么说import
- *.java
- {{1}}部分的JVM变体?
所以归结为:
答案 0 :(得分:2)
常量池表中的所有类条目都是指一个类 在类文件的某处使用?
不,您始终可以输入实际未使用的常量池条目。使用标准编译器编译的类只包含实际使用的条目。
或者是否有其他机制如何进入类条目 恒定的游泳池?
不,常量池是固定的。虽然磁盘上的文件可能不代表加载的实际类,但由于自定义类加载器或Java代理始终可以在运行时操作事物。
假设我不想实施某种类型的懒惰课程 装载"在第一次使用一个类时,我正在加载正确的 通过使用常量池中的类条目使用的类的列表 表
对于静态分析,这是您能做的最好的事情。请注意,您将错过通过反射使用的依赖项,但您无法做到这一点。
答案 1 :(得分:0)
在Java 8中,提供了jdeps命令行工具来分析类文件的依赖关系。
答案 2 :(得分:0)
jdeps是一个非常强大的工具(自java 8起),它将向您展示所有依赖项。它遍历给定的Folder,class或jar文件中的类文件,并显示应用程序中的依赖项。只需运行" jdeps -verbose "它会为您提供您需要的信息,甚至更多。 你可以在这里阅读一些内容: [http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html]和此处[https://www.voxxed.com/blog/2014/12/jdeps-compact-profiles-java-modularity/]
(原谅我的英语但不是我的第一语言)