On Mon, 17 Aug 2026 16:02:58 GMT, Frederic Parain <[email protected]> wrote:

>> Hi everyone, `ClassPrintLayout::class_print_layout` expects internal class 
>> names as its argument, but is called externally by users through `jcmd`. 
>> This leads to inconsistencies with other commands. For example:
>> 
>> 
>> jcmd <pid> VM.class_hierarchy java.lang.String
>> jcmd <pid> VM.class_print_layout java/lang/String
>> 
>> 
>> In addition, the command's output is also in the internal format. This 
>> should be changed to also use the external dotted class name instead. To 
>> resolve this, I added a conversion step that replaces external dotted names 
>> with internal slashed names in-place before we start searching for classes. 
>> That way we avoid extra allocations and string comparisons. As a side 
>> effect, this now works on both internal and external names, as slashes are 
>> left untouched.
>> 
>> This was a previously approved PR in 
>> https://github.com/openjdk/valhalla/pull/2375, but did not get integrated in 
>> time.
>> 
>> 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).
>
> src/hotspot/share/memory/heapInspection.cpp line 600:
> 
>> 598:   }
>> 599: 
>> 600:   for (char* p = class_name; *p != '\0'; p++) {
> 
> Should we add a comment above the method to clarify that the string passed in 
> argument might be modified?

Yeah, I think this is introducing a footgun. We are already allocating with a 
ResourceMark below, why not resource strdup the class_name and alter the strdup?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/32396#discussion_r3803330698

Reply via email to