RFR: JDK-8211279: Verify missing object equals barriers
per.liden at oracle.com
Mon Oct 1 07:31:45 UTC 2018
On 09/28/2018 04:59 PM, Roman Kennke wrote:
> 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
> CHECK_UNHANDLED_OOPS is on).
> 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?
So this means we would have a verification option that, when enabled,
always crashes the VM unless you run Shenandoah? That doesn't sound
quite right to me. This should just be a noop when not using Shenandoah,
don't you think?
More information about the hotspot-gc-dev