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
