--- old/src/share/vm/runtime/vmThread.cpp 2013-09-06 14:11:11.624484651 +0200 +++ new/src/share/vm/runtime/vmThread.cpp 2013-09-06 14:11:11.528482912 +0200 @@ -493,7 +493,9 @@ _vm_queue->set_drain_list(safepoint_ops); // ensure ops can be scanned - SafepointSynchronize::begin(); + SafepointSynchronize::begin(); { + NonGCSafepointMark gc_safepoint_detector(Universe::heap()); + evaluate_operation(_cur_vm_operation); // now process all queued safepoint ops, iteratively draining // the queue until there are none left @@ -535,7 +537,7 @@ _vm_queue->set_drain_list(NULL); // Complete safepoint synchronization - SafepointSynchronize::end(); + } SafepointSynchronize::end(); } else { // not a safepoint operation if (TraceLongCompiles) {