diff -r 28238583a459 -r 1f304d0c888b hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Sun Dec 11 12:05:57 2016 -0800 +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Sun Dec 11 19:07:04 2016 -0800 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "aot/aotLoader.hpp" #include "classfile/classFileStream.hpp" #include "classfile/metadataOnStackMark.hpp" #include "classfile/systemDictionary.hpp" @@ -4011,8 +4012,18 @@ scratch_class->enclosing_method_method_index()); scratch_class->set_enclosing_method_indices(old_class_idx, old_method_idx); + // Replace fingerprint data + the_class->set_has_passed_fingerprint_check(scratch_class->has_passed_fingerprint_check()); + the_class->store_fingerprint(scratch_class->get_stored_fingerprint()); + the_class->set_has_been_redefined(); + if (!the_class->should_be_initialized()) { + // Class was already initialized, so AOT has only seen the original version. + // We need to let AOT look at it again. + AOTLoader::load_for_klass(the_class, THREAD); + } + // keep track of previous versions of this class the_class->add_previous_version(scratch_class, emcp_method_count);