Java-获取JVM中加载的所有类的列表

我想获得属于某个包的所有类及其所有子级的列表。这些类可能已经或可能尚未加载到JVM中。



一只名叫tom的猫
浏览 3040回答 3
3回答

慕勒3428872

这不是编程解决方案,但您可以运行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]

犯罪嫌疑人X

使用反射库,很容易做到:Reflections reflections = new Reflections("my.pkg", new SubTypesScanner(false));这将扫描包含my.pkg包的url / s中的所有类。false参数表示-不排除默认情况下不包括的Object类。在某些情况下(不同的容器),您可以传递classLoader以及参数。因此,获得所有类实际上是在传递中获得Object的所有子类型:Set<String> allClasses =&nbsp;&nbsp; &nbsp; reflections.getStore().getSubTypesOf(Object.class.getName());(普通方法reflections.getSubTypesOf(Object.class)将导致将所有类加载到PermGen中,并且可能会抛出OutOfMemoryError。您不想这样做...)如果要获取Object(或任何其他类型)的所有直接子类型,而不一次全部获得其传递子类型,请使用以下命令:Collection<String> directSubtypes =&nbsp;&nbsp; &nbsp; reflections.getStore().get(SubTypesScanner.class).get(Object.class.getName());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java