RFR 8225483: Shenandoah: Enhance native access barrier

Roman Kennke roman at kennke.org
Tue Jun 11 18:15:30 UTC 2019


BTW, not really. Returning NULL for unreachable oops is a prerequisite for concurrent cleaning. Concurrent evacuation&updating can be done with just the LRB.
However, you likely also need the C1 and C2 barriers.

Roman

Am 11. Juni 2019 14:18:33 MESZ schrieb Zhengyu Gu <zgu at redhat.com>:
>
>
>On 6/11/19 6:39 AM, Roman Kennke wrote:
>> It looks to me like it adds more work, while not reaping the benefit
>of 
>> it, specifically the ability to clean some roots concurrently. I
>assume 
>> this would come in follow-up?
>> 
>Yes, this is a prerequisite of JDK-8225534 
>(https://bugs.openjdk.java.net/browse/JDK-8225534)
>
>Thanks,
>
>-Zhengyu
>
>> Roman
>> 
>> 
>> Am 11. Juni 2019 01:14:48 MESZ schrieb Zhengyu Gu <zgu at redhat.com>:
>> 
>> 
>> 
>>     On 6/10/19 4:32 AM, Aleksey Shipilev wrote:
>> 
>>         On 6/10/19 2:06 AM, Zhengyu Gu wrote:
>> 
>>             Please review this enhancement of native access barrier,
>in
>>             preparation for concurrent root processing.
>> 
>>             Bug: https://bugs.openjdk.java.net/browse/JDK-8225483
>>             Webrev:
>http://cr.openjdk.java.net/~zgu/JDK-8225483/webrev.00/
>> 
>> 
>>         *) It looks to me the webrev itself and the patch in it
>>         disagree. For example, webrev says the
>>         entire oop_store_not_in_heap is #ifdef ASSERT-ed, but the
>patch
>>         has the ASSERT block internally. The
>>         patch also has the unrelated change in
>shenandoahForwarding.hpp.
>> 
>> 
>>     Sorry, it is a broken webrev.
>> 
>>     Updated:http://cr.openjdk.java.net/~zgu/JDK-8225483/webrev.01/
>> 
>>     Reran hotspot_gc_shenandoah (fastdebug and release)
>> 
>>     Thanks,
>> 
>>     -Zhengyu
>> 
>> 
>>         *) Why change Raw::oop_store_in_heap to Raw::oop_store in
>>         ShenandoahBarrierSet::oop_store_in_heap?
>> 
>>         *) You can write this block:
>> 
>>         #ifdef ASSERT
>>         ShenandoahHeap* const heap = ShenandoahHeap::heap();
>>         shenandoah_assert_marked_if(value,
>>         heap->is_gc_in_progress_mask(ShenandoahHeap::EVACUATION));
>>         #endif
>> 
>>         as:
>> 
>>         shenandoah_assert_marked_if(value,
>>         ShenandoahHeap::heap()->is_evacuation_in_progress());
>> 
>> 
>>         *) Also, this block:
>> 
>>         ShenandoahHeap* const heap = ShenandoahHeap::heap();
>>         if (!CompressedOops::is_null(value) &&
>>         heap->is_gc_in_progress_mask(ShenandoahHeap::EVACUATION)) {
>> 
>>         as:
>> 
>>         if (!CompressedOops::is_null(value) &&
>>         ShenandoahHeap::heap()->is_evacuation_in_progress()) {
>> 
>> 
>> 
>>         -Aleksey
>> 
>> 
>> -- 
>> Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.

-- 
Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.


More information about the shenandoah-dev mailing list