RFR: JDK-8199620: Support for JNI object pinning (original) (raw)

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 pinobject(oop) and void unpinobject(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 pinobjct() 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::checkforlazycriticalnative().

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