[master] RFR: Implement Shenandoah support [v22]

Roman Kennke rkennke at openjdk.java.net
Wed Apr 20 10:19:58 UTC 2022


On Tue, 19 Apr 2022 19:53:47 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:

>> Roman Kennke has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 44 commits:
>> 
>>  - Merge remote-tracking branch 'origin/shenandoah-lilliput' into shenandoah-lilliput
>>  - Merge remote-tracking branch 'origin/shenandoah-lilliput' into shenandoah-lilliput
>>  - Merge branch 'master' into shenandoah-lilliput
>>  - Merge branch 'master' into shenandoah-lilliput
>>  - Revert some unnecessary changes
>>  - Revert JVMTI related changes
>>  - Add missing precompiled include
>>  - 32bit fixes
>>  - More reverts and cleanups
>>  - Restore some commented-out parts
>>  - ... and 34 more: https://git.openjdk.java.net/lilliput/compare/47392f37...00ca6aea
>
> src/hotspot/share/gc/shenandoah/shenandoahForwarding.inline.hpp line 85:
> 
>> 83: 
>> 84:   while (true) {
>> 85:     markWord new_mark = markWord::encode_pointer_as_mark(update);
> 
> You can hoist encoding `new_mark` outside the loop.

Done

> src/hotspot/share/gc/shenandoah/shenandoahObjectUtils.inline.hpp line 36:
> 
>> 34: #include "runtime/thread.hpp"
>> 35: 
>> 36: // This is a variant of ObjectSynchronizer::safe_load_mark(), which does the same thing, but also
> 
> `ObjectSynchronizer::safe_load_mark()` no longer exists, please update the comment.

Done

> src/hotspot/share/gc/shenandoah/shenandoahObjectUtils.inline.hpp line 40:
> 
>> 38: // code is supposed to observe from-space objects.
>> 39: #ifdef _LP64
>> 40: markWord ShenandoahObjectUtils::stable_mark(oop obj) {
> 
> There is a lot of duplication with `ObjectSynchronizer::stable_mark()`. I think you can just  call `objectSynchronizer::stable_mark()` after resolve forward pointer.

No, unfortunately not. We need to resolve inside the loop in order to catch concurrently evacuated objects. I considered the alternative to put some kind of GC hook into the loop in ObjectSynchronizer::stable_mark() but decided against it in order to keep shared code cleaner.

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

PR: https://git.openjdk.java.net/lilliput/pull/32


More information about the lilliput-dev mailing list