RFR: System.gc() with ExplicitGCInvokesConcurrent should block

Zhengyu Gu zgu at redhat.com
Wed Sep 6 16:08:15 UTC 2017



On 09/06/2017 12:06 PM, Aleksey Shipilev wrote:
> On 09/06/2017 06:03 PM, Zhengyu Gu wrote:
>> On 09/06/2017 11:58 AM, Aleksey Shipilev wrote:
>>> On 09/06/2017 05:56 PM, Zhengyu Gu wrote:
>>>> On 09/06/2017 11:20 AM, Aleksey Shipilev wrote:
>>>>> Current ExplicitGCInvokesConcurrent violates the System.gc() contract in this part: "***When
>>>>> control
>>>>> returns from the method call,*** the Java Virtual Machine has made a best effort to reclaim space
>>>>> from all discarded objects.". To fix it, we need to wait for the end of cycle before returning from
>>>>> System.gc() call:
>>>>>      http://cr.openjdk.java.net/~shade/shenandoah/concthread-eic-block/webrev.01/
>>>>
>>>> Does it make sense to move flag setting inside mutex lock? it provides release-unlock semantics.
>>>
>>> Nope, because the is_conc_gc_requested() is lock-free.
>>
>> Yes, but an acquire in is_conc_gc_requested should be sufficient, no?
> 
> Memory model wise, you need to match acquires and releases. So if you release under the lock, you
> better be user to acquire under it too. Which makes is_conc_gc_requested locked. It is cleaner to
> separate OrderAccess for acq-rel semantics and mutex for mutual exclusion here.

Then, okay.

-Zhengyu

> 
> -Aleksey
> 


More information about the shenandoah-dev mailing list