RFR(L): 8151601: Cleanup locking of the Reference pending list
Stefan Karlsson
stefan.karlsson at oracle.com
Tue Mar 15 11:49:39 UTC 2016
Hi Per,
On 15/03/16 12:02, Per Liden wrote:
> Hi,
>
> I got some minor comments from StefanK offline, here's an updated webrev:
>
> Incremental: http://cr.openjdk.java.net/~pliden/8151601/webrev.diff-0vs1/
>
> Full: http://cr.openjdk.java.net/~pliden/8151601/webrev.1/
Reviewed.
I reviewed this offline with Per, and I questioned the circular
dependency between the ReferencePendingListLocker and the
ReferencePendingListLockerThread. Since, at least to me, that part makes
the code slightly non-obvious. I've created a small PoC patch:
http://cr.openjdk.java.net/~stefank/8151601/webrev.non-circular.00.delta/
http://cr.openjdk.java.net/~stefank/8151601/webrev.non-circular.00/
In this patch, ReferencePendingListLocker is the user visible class that
determines if we can directly lock the reference pending list lock or if
we have to delegate to the ReferencePendingListLockerThread. The
ReferencePendingListLockerFromJava class is used to lock the reference
pending lock from both ReferencePendingListLocker and
ReferencePendingListLockerThread.
We were not entirely happy with the names, so we decided to defer this
and maybe revisit this later.
Thanks,
StefanK
>
> thanks,
> Per
>
> On 2016-03-10 16:53, Per Liden wrote:
>> Hi,
>>
>> The SurrogateLockerThread is currently used by both G1 and CMS to lock
>> the Reference pending list. However, there's quite a bit of unnecessary
>> code duplication and special case handling in this area. This patch is
>> an attempt to clean this up.
>>
>> The main changes:
>>
>> - All locking of the pending list is how done through the new
>> ReferencePendingListLocker. This locker delegates to a locker thread if
>> needed.
>>
>> - The locking related code in instanceRefKlass was moved to the new
>> ReferencePendingListLocker.
>>
>> - What used to be the SurrogateLockerThread is now the
>> ReferencePendingListLockerThread.
>>
>> - The new virtual function
>> CollectedHeap::needs_reference_pending_list_locker_thread() indicates if
>> a collector needs a locker thread. G1 and CMS returns true here.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8151601
>> Webrev: http://cr.openjdk.java.net/~pliden/8151601/webrev.0/
>> Testing: jprt, vm.gc
>>
>> cheers,
>> Per
More information about the hotspot-gc-dev
mailing list