RFR: JDK-8199781: Don't use naked == for comparing oops (original) (raw)
Roman Kennke rkennke at redhat.com
Mon Mar 19 18:32:19 UTC 2018
- Previous message (by thread): RFR: JDK-8199735: Mark word updates need to use Access API
- Next message (by thread): RFR: JDK-8199781: Don't use naked == for comparing oops
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
GCs might need to handle object comparison specially, for example, when a concurrent GC allows both from- and to-space copies of an object to be in use. In this case, object equality cannot be expressed by direct address comparsion, but must also take potential different versions of an object into account.
This adds a method oopDesc::equals(oop o1, oop o2), which goes through the Access API to compare objects. Default impl does ==
It is based on our finds from Shenandoah. We do, in fact, have some extra code in oopsHierarchy.hpp to detect naked oop==oop (with CheckUnhandledOops enabled), but it requires that code that does really want naked == (e.g. GCs) to use another method oopDesc::unsafe_equals() instead, and code that wants to use == and assert that the comparison is safe (e.g. both objects are already in to-space) use oopDesc::safe_equals(). Not sure if you want that?
Also, I'd have preferred to mark equals() as inline in oop.hpp, but that pulls in a rats nest of dependencies problems. I hope the way I did it is acceptable?
There's one little thing in growableArray.hpp: in order to do the right thing for GrowableArray I needed to provide a special templated comparison function, with a specialized version for oop.
It also overloads the == operator in Handle to do the right thing.
Webrev: http://cr.openjdk.java.net/~rkennke/JDK-8199781/webrev.00/
Testing: built fastdebug/release, tier1_runtime, tier1_gc
Please review!
Thanks, 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/20180319/a39eea6a/signature.asc>
- Previous message (by thread): RFR: JDK-8199735: Mark word updates need to use Access API
- Next message (by thread): RFR: JDK-8199781: Don't use naked == for comparing oops
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]