RFR: 8193513: add support for printing a stack trace on class loading [v7]
Ioi Lam
iklam at openjdk.org
Fri Jul 7 14:58:02 UTC 2023
On Tue, 4 Jul 2023 23:23:07 GMT, Doug Simon <dnsimon at openjdk.org> wrote:
>> In the development of libgraal, it has been very useful to see why a given class is loaded (e.g., trying to reduce startup time by avoiding unnecessary eager class loading). One way to do this is to see the stack trace when the VM loads a class. The only possibility currently is to add a static initializer to the class of interest. However, not only is this not always possible but it doesn't correlate with class loading but with class initialization.
>>
>> This PR adds support for `-Xlog:class+load+cause` and `-Xlog:class+load+cause+native` that produce output according to a new `LogClassLoadingCauseFor` VM flag:
>>
>>
>> product(ccstr, LogClassLoadingCauseFor, nullptr, \
>> "Apply -Xlog:class+load+cause* to classes whose fully " \
>> "qualified name contains this string ("*" matches " \
>> "any class).") \
>>
>>
>> Example usage:
>>
>> java "-Xlog:class+load+cause*" -XX:LogClassLoadingCauseFor=java.util.concurrent.ConcurrentHashMap$V --version
>> [0.075s][info][class,load,cause] Java stack when loading java.util.concurrent.ConcurrentHashMap$ValuesView:
>> [0.075s][info][class,load,cause] at java.util.concurrent.ConcurrentHashMap.values(java.base/ConcurrentHashMap.java:1263)
>> [0.075s][info][class,load,cause] at jdk.internal.loader.NativeLibraries.find(java.base/NativeLibraries.java:102)
>> [0.075s][info][class,load,cause] at java.lang.ClassLoader.findNative(java.base/ClassLoader.java:2457)
>> [0.075s][info][class,load,cause] at sun.nio.fs.UnixNativeDispatcher.init(java.base/Native Method)
>> [0.075s][info][class,load,cause] at sun.nio.fs.UnixNativeDispatcher.<clinit>(java.base/UnixNativeDispatcher.java:817)
>> [0.075s][info][class,load,cause] at sun.nio.fs.UnixFileSystem.<init>(java.base/UnixFileSystem.java:96)
>> [0.075s][info][class,load,cause] at sun.nio.fs.BsdFileSystem.<init>(java.base/BsdFileSystem.java:50)
>> [0.075s][info][class,load,cause] at sun.nio.fs.MacOSXFileSystem.<init>(java.base/MacOSXFileSystem.java:52)
>> [0.075s][info][class,load,cause] at sun.nio.fs.MacOSXFileSystemProvider.newFileSystem(java.base/MacOSXFileSystemProvider.java:44)
>> [0.075s][info][class,load,cause] at sun.nio.fs.MacOSXFileSystemProvider.newFileSystem(java.base/MacOSXFileSystemProvider.java:37)
>> [0.075s][info][class,load,cause] at sun.nio.fs.UnixFileSystemProvider.<init>(java.base/UnixFileSystemProvider.java:78)
>> [0.075s][info][class,load,cau...
>
> Doug Simon has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
>
> use OS specific native stack printing in class load cause native stack logging
Changes requested by iklam (Reviewer).
src/hotspot/share/oops/instanceKlass.cpp line 3749:
> 3747:
> 3748: print_class_load_cause_logging();
> 3749:
This prints the stacks before printing the name of the class. I think the name should be printed first.
-------------
PR Review: https://git.openjdk.org/jdk/pull/14553#pullrequestreview-1519101603
PR Review Comment: https://git.openjdk.org/jdk/pull/14553#discussion_r1255952066
More information about the hotspot-dev
mailing list