RFR: 8200235: Generalize jniFastGetField jobject/jweak resolve

Erik Österlund erik.osterlund at oracle.com
Wed Apr 18 11:14:48 UTC 2018


Hi,

The fantastic jniFastGetField optimization that we all know and love, 
resolves jobjects/jweaks in native, possibly concurrent with GC safepoints.
Currently it is assumed that it is "safe" to just unmask the potential 
jweak tag, and read the jobject/jweak oop and then speculatively read 
the integer value of that oop (resorting to the signal handler as plan B 
if the heap was concurrently unmapped in the safepoint).

This happens to be safe with existing collectors, but ties very strongly 
to how these oops are processed (as it is normally strictly forbidden by 
mutators to resolve jobject/jweak in safepoints, except of course when 
using it to quickly read integers via JNI).

My proposed solution is to add a try_resolve_jobject_in_native() 
function in the BarrierSetAssembler class, and allow it try to perform 
this resolution, but also give it an option to opt out should it find 
that this jobject/jweak really has to go through the proper VM 
transition. This allows a GC where this is not in general safe (but 
possibly mostly safe depending on GC-specific details such as pointer 
colouring) to override this special in-native jobject/jweak resolution. 
That should make everyone happy I hope.

I provided changes for x86_64, SPARC and AArch64. PPC and S390 do not 
use jniFastGetField, and there are no current plans that I am aware of 
to introduce support for any new GC any time soon to the non-AArch64 arm 
port.

Webrev:
http://cr.openjdk.java.net/~eosterlund/8200235/webrev.00/

Bug:
https://bugs.openjdk.java.net/browse/JDK-8200235

Thanks,
/Erik


More information about the hotspot-dev mailing list