On Mon, 4 May 2026 11:19:55 GMT, Casper Norrbin <[email protected]> wrote:

>> Hi everyone, `PrintClassLayout::print_class_layout` expects internal class 
>> names as its argument, but is called externally by users through `jcmd`. 
>> This leads to inconsistencies with other functions. For example:
>> 
>> jcmd <pid> VM.class_hierarchy java.lang.String
>> jcmd <pid> VM.class_print_layout java/lang/String
>> 
>> 
>> In addition, its output is also in the internal format. This should be 
>> changed to also use the external dotted class name instead. ~~For this fix I 
>> changed the `Closure` used for finding classes to instead use external 
>> names, and also swapped the output print to use the external name.~~ I added 
>> a conversion from external dotted names to internal slashed names before we 
>> start searching for classes. That way we avoid comparing strings and avoid 
>> allocations from calls to `external_name()`. As a side effect, this now 
>> works on both internal and external names, as slashes are left untouched.
>> 
>> Testing:
>> - Tier 1
>> - Manual inspection with `jcmd` 
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Casper Norrbin has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   feedback

Looks good.

Thanks

src/hotspot/share/memory/heapInspection.cpp line 622:

> 620:     ResourceMark rm;
> 621:     st->print_cr("Class %s [@%s]:", klass->external_name(),
> 622:         klass->class_loader_data()->loader_name());

Suggestion:

    st->print_cr("Class %s [@%s]:", klass->external_name(),
                 klass->class_loader_data()->loader_name());

Pre-existing indent nit

-------------

Marked as reviewed by dholmes (Committer).

PR Review: 
https://git.openjdk.org/valhalla/pull/2375#pullrequestreview-4225869185
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2375#discussion_r3186542640

Reply via email to