--- old/src/share/vm/runtime/deoptimization.cpp 2015-10-14 13:54:34.533398248 +0200 +++ new/src/share/vm/runtime/deoptimization.cpp 2015-10-14 13:54:34.432400690 +0200 @@ -935,7 +935,7 @@ if (mon_info->eliminated()) { assert(!mon_info->owner_is_scalar_replaced() || realloc_failures, "reallocation was missed"); if (!mon_info->owner_is_scalar_replaced()) { - Handle obj = Handle(mon_info->owner()); + Handle obj = Handle(oopDesc::bs()->write_barrier(mon_info->owner())); markOop mark = obj->mark(); if (UseBiasedLocking && mark->has_bias_pattern()) { // New allocated objects may have the mark set to anonymously biased. @@ -1058,7 +1058,7 @@ for (int j = 0; j < monitors->number_of_monitors(); j++) { BasicObjectLock* src = monitors->at(j); if (src->obj() != NULL) { - ObjectSynchronizer::fast_exit(src->obj(), src->lock(), thread); + ObjectSynchronizer::fast_exit(oopDesc::bs()->write_barrier(src->obj()), src->lock(), thread); } } array->element(i)->free_monitors(thread);