RFR: JDK-8199620: Support for JNI object pinning
Roman Kennke
rkennke at redhat.com
Thu Mar 15 13:31:17 UTC 2018
Am 15.03.2018 um 13:50 schrieb Per Liden:
> Hi Roman,
>
> On 03/14/2018 07:51 PM, Roman Kennke wrote:
>> Am 14.03.2018 um 19:13 schrieb Roman Kennke:
>>> Currently, the Get/Release*Critical() family of functions use the
>>> GCLocker protocol to ensure that no JNI critical arrays are in use when
>>> a GC pause is entered.
>>>
>>> Some GCs may instead want to use object pinning and guarantee that the
>>> object does not move. For example, this is easy to do with region-based
>>> GCs (G1, Shenandoah, ZGC) by simply not including regions with pinned
>>> objects in the collection set.
>>>
>>> The implementation/API that I'm proposing is fairly simple: add two
>>> methods oop pin_object(oop) and void unpin_object(oop) to CollectedHeap,
>>> and call them from JNI's Get/Release*Critical methods.
>>>
>>> This approach has been working perfectly fine since a long time in
>>> Shenandoah.
>>>
>>> Bug:
>>> https://bugs.openjdk.java.net/browse/JDK-8199620
>>> Webrev:
>>> http://cr.openjdk.java.net/~rkennke/8199620/webrev.00/
>>
>> And here is the correct patch:
>>
>> http://cr.openjdk.java.net/~rkennke/8199620/webrev.01/
>
> It seems your patch both grabs the GCLocker _and_ pins the object? I
> would have assumed that the default implementation of pin_objct() would
> be the one calling the GCLocker if pinning isn't supported by the GC.
>
> Also, it seems that this patch doesn't take "critical native" functions
> into account, i.e. those special functions which grabs the GCLocker
> "lazily" when a safepoint happens. See
> SafepointSynchronize::check_for_lazy_critical_native().
>
I researched a little, and this seems only be used in:
src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c
src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCryptoMD.c
and it is an optional internal feature, to be turned off by
-CriticalJNINatives and only used in Solaris. Opting to ignore it must
be safe, or not?
Roman
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20180315/b16ef24a/signature.asc>
More information about the hotspot-gc-dev
mailing list