如何让Java ClassLoader首次输出每个类?
是否有一个java
选项,可以做到这一点,或者如果我继承ClassLoader并简单地在调用super()之前添加一个System.out.println(),我将如何使我的应用程序使用我的类加载器?
我为什么要这样做?
当使用java 9运行我的应用程序时,它会出现错误,但堆栈跟踪不会源自我的代码,所以我不知道是什么导致它。我的想法是输出每个类加载,然后我会更好地了解出错的地方。
Uncaught error fetching image:
java.lang.NullPointerException
at java.desktop/sun.awt.image.URLImageSource.getConnection(Unknown Source)
at java.desktop/sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at java.desktop/sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at java.desktop/sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at java.desktop/sun.awt.image.ImageFetcher.run(Unknown Source)
您可以将-Xlog
选项与标签class
和load
一起使用。像这样:
java -Xlog:class+load <other arguments>
输出将是这样的:
...
[0.083s][info][class,load] jdk.internal.module.ModuleHashes$Builder source: jrt:/java.base
[0.084s][info][class,load] java.util.Collections$UnmodifiableMap source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleResolution source: jrt:/java.base
[0.084s][info][class,load] java.lang.module.ModuleReference source: jrt:/java.base
[0.084s][info][class,load] java.util.function.Supplier source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.SystemModuleFinder$1 source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleReferenceImpl source: jrt:/java.base
[0.084s][info][class,load] java.util.KeyValueHolder source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleHashes$HashSupplier source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.SystemModuleFinder$2 source: jrt:/java.base
[0.085s][info][class,load] jdk.internal.module.ModuleBootstrap$PerfCounters source: jrt:/java.base
[0.085s][info][class,load] java.util.Optional source: jrt:/java.base
[0.085s][info][class,load] jdk.internal.loader.BootLoader source: jrt:/java.base
...