RFR: 8199739: Use HeapAccess when loading oops from static fields in javaClasses.cpp (original) (raw)
coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Mon Mar 19 19:00:15 UTC 2018
- Previous message: RFR: 8199739: Use HeapAccess when loading oops from static fields in javaClasses.cpp
- Next message: RFR: 8199739: Use HeapAccess when loading oops from static fields in javaClasses.cpp
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I like Roman's version with static_field_base() the best. The reason I wanted to keep static_field_addr and not have static_oop_addr was so there is one function to find static fields and this would work with the jvmci classes and with loading/storing primitives also. So I like the consistent change that Roman has.
There's a subtlety that I haven't quite figured out here. static_field_addr gets an address mirror+offset, so needs a load barrier on this offset, then needs a load barrier on the offset of the additional load (?)
- oop static_field_base() { return java_mirror(); }
Currently java_mirror() has no load_barriers because it's an OopHandle in the ClassLoaderData. Will it with Shenandoah and ZGC (even before concurrent class unloading?)
thanks, Coleen
On 3/19/18 9:24 AM, Roman Kennke wrote:
Hi Stefan,
To be honest, I'd find it better to get rid of staticfieldaddr() altogether, and I am also not a fan of resolve(): it seems easy to just cover everything with it, but for Shenandoah it means to do a write-barrier, even when a read-barrier would suffice (which is cheaper). I recognize that none of the affected code is very performance sensitive, but if there is a cleaner solution, I'd go for this. What about this approach: http://cr.openjdk.java.net/~rkennke/JDK-8199739/webrev.00/ ?
Roman
Hi again, Seems like Coleen wanted me to solve this problem slightly differently. She suggested that I add an Access<>::resolve barrier in staticfieldaddr: http://cr.openjdk.java.net/~stefank/8199739/webrev.03/ This will probably solve the primitive access for Shenandoah. What do you think? Thanks, StefanK On 2018-03-19 12:29, Stefan Karlsson wrote: Hi Roman,
On 2018-03-19 11:17, Roman Kennke wrote: Hi Stefan,
thank you! grepping for staticfieldaddr() yields some more places that'd need similar treatment: jlong javalangrefSoftReference::clock() void javalangrefSoftReference::setclock(jlong value) Maybe cover them as well? Or I'll file a separate issue. Your call. This seems like primitive accesses, I'll be happy to leave those to you. ;) Thanks, StefanK Thanks, Roman
Hi all, Kim and Roman commented that my patch doesn't work with Shenandoah. Here's an updated version: http://cr.openjdk.java.net/~stefank/8199739/webrev.02/ Thanks, StefanK On 2018-03-16 15:39, Stefan Karlsson wrote: Hi all, Please review this patch to use HeapAccess<>::oopload instead of oopDesc::loaddecodeheapoop when loading oops from static fields in javaClasses.cpp: http://cr.openjdk.java.net/~stefank/8199739/webrev.01/ https://bugs.openjdk.java.net/browse/JDK-8199739 It's necessary to use HeapAccess<>::oopload to inject load barriers for GCs that need them. Thanks, StefanK
- Previous message: RFR: 8199739: Use HeapAccess when loading oops from static fields in javaClasses.cpp
- Next message: RFR: 8199739: Use HeapAccess when loading oops from static fields in javaClasses.cpp
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]