On Mon, 9 Sep 2024 16:51:35 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> There is no dedicated klass field anymore, the Klass* is encoded in the 
>> mark, and we would need to extract it. What is the purpose of the visitors? 
>> Do they need to see the klass/compressedKlass, or is it sufficient to visit 
>> the mark-word (which we already do, but as CInt).
>
> I've been looking into this. It's a bit hard to follow but I think you do 
> need to do something more here. Can you run ClhsdbInspect.java and send me 
> the output. In specific I need to know if the log includes the following:
> 
> 
> hsdb> + inspect 0x00000007cff154b8
> instance of Oop for 
> java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject @ 
> 0x00000007cff154b8 (size = 24)
> _mark: 1
> _metadata._compressed_klass: InstanceKlass for 
> java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
> firstWaiter: Oop for 
> java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode @ 
> 0x00000007cfff5f80
> lastWaiter: Oop for 
> java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode @ 
> 0x00000007cfff5f80
> this$0: Oop for java/util/concurrent/locks/ReentrantLock$NonfairSync @ 
> 0x00000007cff15498

I pulled your changes and I see one slight difference in the output. The 
following line is missing:

`_metadata._compressed_klass: InstanceKlass for 
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject`

I realize that there is no `_metadata._compressed_klass` when you have compact 
headers, and that the Klass* is encoded in the `_mark` word, which is now looks 
something like this in the output:

_mark: 16294762323640321

So you can say that the Klass* is embedded in the _mark work, but this isn't of 
much help to SA users. I think what is expected is that the visitor is passed a 
MetadataField object that when getValue() is called on it, the Klass mirror is 
returned. Maybe we need a new CompactKlassField type like we current have a 
NarrowKlassField field type, and it will do the decoding of the _mark work into 
a Klass. The current getKlass() is related to this.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20677#discussion_r1750743693

Reply via email to