--- old/src/hotspot/share/runtime/objectMonitor.cpp 2018-09-17 23:30:30.731743581 -0700 +++ new/src/hotspot/share/runtime/objectMonitor.cpp 2018-09-17 23:30:30.475743590 -0700 @@ -109,7 +109,6 @@ static int Knob_Poverty = 1000; static int Knob_FixedSpin = 0; static int Knob_PreSpin = 10; // 20-100 likely better -static int Knob_ResetEvent = 0; static int Knob_FastHSSEC = 0; static int Knob_MoveNotifyee = 2; // notify() - disposition of notifyee @@ -569,14 +568,8 @@ // we were spinning. That's harmless. If we iterate and call park(), // park() will consume the event and return immediately and we'll // just spin again. This pattern can repeat, leaving _succ to simply - // spin on a CPU. Enable Knob_ResetEvent to clear pending unparks(). - // Alternately, we can sample fired() here, and if set, forgo spinning - // in the next iteration. - - if ((Knob_ResetEvent & 1) && Self->_ParkEvent->fired()) { - Self->_ParkEvent->reset(); - OrderAccess::fence(); - } + // spin on a CPU. + if (_succ == Self) _succ = NULL; // Invariant: after clearing _succ a thread *must* retry _owner before parking.