RFR: JDK-8211279: Verify missing object equals barriers

Roman Kennke rkennke at redhat.com
Fri Sep 28 14:59:54 UTC 2018

GCs like Shenandoah require an extra barrier for comparing objects
(oop==oop). It is easy to forget or overlook this. It would be very
useful to have a flag to turn on extra verification that catches missing
object equality barriers.

This change inserts an assert into == and != operators for the oop class
in oopsHierarchy.hpp. This only gets compiled in fastdebug builds (when

It also adds a develop flag VerifyObjectEquals that is used to turn on
this verification.

It also adds a method oopDesc::unsafe_equals(..) to be used in cases
where you know what what you are doing, and really want to use direct ==
comparison without using barriers. This is used in e.g.
ReferenceProcessor or all over the place in ShenandoahGC.

The change also fixes a couple of places where oops are compared to
non-oops like Universe::non_oop_word() to use the oop==void* operator
instead, so those don't falsely trip the verification.

It doesn't make sense to turn this check on if you're not running a GC
that needs it, unless you want to go fix all the oop==oop in the GC itself.


What do you think?

More information about the hotspot-runtime-dev mailing list