3 回答
TA贡献1848条经验 获得超6个赞
这不是编程解决方案,但您可以运行
java -verbose:class ....
然后JVM会丢弃正在加载的内容以及从何处卸载。
[Opened /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jsse.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jce.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/charsets.jar]
[Loaded java.lang.Object from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
TA贡献2080条经验 获得超4个赞
使用反射库,很容易做到:
Reflections reflections = new Reflections("my.pkg", new SubTypesScanner(false));
这将扫描包含my.pkg包的url / s中的所有类。
false参数表示-不排除默认情况下不包括的Object类。
在某些情况下(不同的容器),您可以传递classLoader以及参数。
因此,获得所有类实际上是在传递中获得Object的所有子类型:
Set<String> allClasses =
reflections.getStore().getSubTypesOf(Object.class.getName());
(普通方法reflections.getSubTypesOf(Object.class)将导致将所有类加载到PermGen中,并且可能会抛出OutOfMemoryError。您不想这样做...)
如果要获取Object(或任何其他类型)的所有直接子类型,而不一次全部获得其传递子类型,请使用以下命令:
Collection<String> directSubtypes =
reflections.getStore().get(SubTypesScanner.class).get(Object.class.getName());
添加回答
举报