--- old/src/share/vm/prims/methodHandles.cpp 2015-06-27 04:11:15.000000000 +0300 +++ new/src/share/vm/prims/methodHandles.cpp 2015-06-27 04:11:15.000000000 +0300 @@ -36,6 +36,7 @@ #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" +#include "prims/unsafe.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/javaCalls.hpp" #include "runtime/reflection.hpp" @@ -1214,7 +1215,8 @@ ? (flags & JVM_ACC_STATIC) != 0 : (flags & JVM_ACC_STATIC) == 0)) { int vmindex = java_lang_invoke_MemberName::vmindex(mname); - return (jlong) vmindex; + bool is_final = (flags & JVM_ACC_FINAL) != 0; + return Unsafe::field_offset_from_byte_offset(vmindex, is_final); } } const char* msg = (must_be_static ? "static field required" : "non-static field required"); @@ -1339,16 +1341,7 @@ { MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag); nmethodBucket* b = java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(context()); - while(b != NULL) { - nmethod* nm = b->get_nmethod(); - if (b->count() > 0 && nm->is_alive() && !nm->is_marked_for_deoptimization()) { - nm->mark_for_deoptimization(); - marked++; - } - nmethodBucket* next = b->next(); - delete b; - b = next; - } + marked = nmethodBucket::release(b); java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(context(), NULL); // reset context } if (marked > 0) {