RFR: 8195972: Refactor oops in JNI to use the Access API

Erik Österlund erik.osterlund at oracle.com
Wed Mar 28 13:40:00 UTC 2018

Hi Kim,

I noticed that jobjects are now IN_CONCURRENT_ROOT in this patch. I 
wonder if this is the right time to upgrade them to IN_CONCURRENT_ROOT. 
Until there is at least one GC that actually scans these concurrently, 
this will only impose extra overheads (unnecessary G1 SATB-enqueue 
barriers on the store required to release jobjects) with no obvious gains.

The platform specific code needs to go along with this. I have a patch 
out to generalize interpreter code. In there, I am treating resolve 
jobject as a normal strong root. That would probably need to change. It 
is also troubling that jniFastGetField shoots raw loads into (hopefully) 
the heap, dodging all GC barriers, hoping that is okay. I wonder if 
starting to actually scan jobjects concurrently would force us to 
disable that optimization completely to be generally useful to all 
collectors. For example, an IN_CONCURRENT_ROOT load access for ZGC might 
require a slowpath. But in jniFastGetField, there is no frame, and hence 
any code that runs in there must not call anything in the runtime. 
Therefore, with IN_CONCURRENT_ROOT, it is not generally safe to use 
jniFastGetField, without doing... something about that code.

I would like to hear your thoughts about this. Perhaps the intention is 
just to take incremental steps towards being able to scan jobjects 
concurrently, and this is just the first step? Still, I would be 
interested to hear about what you think about the next steps. If we 
decide to go with IN_CONCURRENT_ROOT now already, then I should change 
my interpreter changes that are out for review to do the same so that we 
are consistent.

Otherwise, this looks great, and I am glad we finally have jni handles 


On 2018-03-28 04:06, Kim Barrett wrote:
> Please review this change to the JNIHandles class to use the Access
> API.  The handle construction, deletion, and value access (via resolve
> &etc) are updated to use the Access API.
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8195972
> Webrev:
> http://cr.openjdk.java.net/~kbarrett/8195972/open.00/
> Testing:
> local jck-runtime:vm/jni, tonga:nsk.jvmti
>    jtreg:fromTonga_nsk_coverage, jtreg:fromTonga_vm_runtime,
>    jtreg/runtime/jni
> Mach5 {jdk,hs}-tier{1,2,3}
> Mach5 hs-tier{5,6,7}-rt (tiers containing additional JNI tests)

More information about the hotspot-dev mailing list