On Wed, 21 Oct 2026 02:26:26 GMT, Yasumasa Suenaga <[email protected]> wrote:

>> Valhalla introduced flattened value object, however SA cannot dump it into 
>> heapdump e.g. `jhsdb jmap --binaryheap`.
>> Actually HeapHprofBinWriter.java has following lines. Hence the user cannot 
>> check flattened object from heapdump generated by SA.
>> 
>> 
>>         case JVM_SIGNATURE_CLASS:
>>         case JVM_SIGNATURE_ARRAY: {
>>             if (field.isFlat()) {
>>               // FIXME - we don't handle flattened fields yet. Just treat 
>> them
>>               // as a null reference. See JDK-8381370.
>>               writeObjectID(null);
>> 
>> 
>> This PR addressed it.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Yasumasa Suenaga has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains four additional 
> commits since the last revision:
> 
>  - Re-enable HeapDumpTestWithActiveProcess.java
>  - Merge branch 'master' into JDK-8381370
>  - Use getFieldHolder() rather than getKlass()
>  - 8381370: SA is not writing out flattened fields to the hprof file

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java
 line 75:

> 73:                                 if (bottomType instanceof InstanceKlass ||
> 74:                                     bottomType instanceof TypeArrayKlass) 
> {
> 75:                                     writeObjectArray((ObjArray)oop, 
> flatObjects);

Calls like this bypass the HeapGXLWriter override of writeObjectArray() and 
similar APIs, resulting in just calling the default version in 
AbstractHeapGraphWriter. HeapGXLWriter needs to be updated in the same manner 
as HeapHprofBinWriter. Also, all these overridden methods in HeapGXLWriter and  
HeapHprofBinW should be marked as `@Override` so this type of issue is caught 
at compile time. Unfortunately we have no HeapGXLWriter tests.

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java
 line 95:

> 93:                                         if (name.equals(javaLangThread)) {
> 94:                                             writeThread(instance, 
> flatObjects);
> 95:                                             return false;

I'm not sure why an early return is done here, but the consequence is that the 
loop that drains flatObjects below is not executed, leaving references to 
flattened Objects that are never written out. You might want to add a test case 
for this if not too complicated.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/33395#discussion_r4342126183
PR Review Comment: https://git.openjdk.org/jdk/pull/33395#discussion_r4342179639

Reply via email to