如何让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)
Run Code Online (Sandbox Code Playgroud)
您可以使用-Xlog与标签选项class和load.像这样:
java -Xlog:class+load <other arguments>
Run Code Online (Sandbox Code Playgroud)
这会将加载的类记录到文件中-Xlog.
输出将是这样的:
...
[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
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |