diff -r 28b50d07f6f8 -r 710a3c8b516e src/share/vm/oops/klass.hpp --- a/src/share/vm/oops/klass.hpp Mon Sep 08 12:35:01 2014 -0700 +++ b/src/share/vm/oops/klass.hpp Tue Aug 08 15:57:29 2017 +0800 @@ -275,8 +275,18 @@ // The Klasses are not placed in the Heap, so the Card Table or // the Mod Union Table can't be used to mark when klasses have modified oops. // The CT and MUT bits saves this information for the individual Klasses. - void record_modified_oops() { _modified_oops = 1; } - void clear_modified_oops() { _modified_oops = 0; } + void record_modified_oops() { + _modified_oops = 1; +#ifdef MIPS64 + if (Use3A2000) OrderAccess::fence(); +#endif + } + void clear_modified_oops() { + _modified_oops = 0; +#ifdef MIPS64 + if (Use3A2000) OrderAccess::fence(); +#endif + } bool has_modified_oops() { return _modified_oops == 1; } void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = 1; }