--- old/src/hotspot/share/oops/method.cpp 2017-10-13 18:27:22.021021838 -0400 +++ new/src/hotspot/share/oops/method.cpp 2017-10-13 18:27:21.649093596 -0400 @@ -444,6 +444,11 @@ return mh->method_counters(); } +bool Method::init_method_counters(MethodCounters* counters) { + // Try to install a pointer to MethodCounters, return true on success. + return Atomic::cmpxchg(counters, &_method_counters, (MethodCounters*)NULL) == NULL; +} + void Method::cleanup_inline_caches() { // The current system doesn't use inline caches in the interpreter // => nothing to do (keep this method around for future use) @@ -1109,7 +1114,7 @@ } volatile address Method::from_compiled_entry_no_trampoline() const { - nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code); + CompiledMethod *code = OrderAccess::load_acquire(&_code); if (code) { return code->verified_entry_point(); } else { @@ -1135,7 +1140,7 @@ // Not inline to avoid circular ref. bool Method::check_code() const { // cached in a register or local. There's a race on the value of the field. - CompiledMethod *code = (CompiledMethod *)OrderAccess::load_ptr_acquire(&_code); + CompiledMethod *code = OrderAccess::load_acquire(&_code); return code == NULL || (code->method() == NULL) || (code->method() == (Method*)this && !code->is_osr_method()); }