diff -r ab0121071f54 -r c223b0a9872e hotspot/src/share/vm/oops/method.cpp --- a/hotspot/src/share/vm/oops/method.cpp Tue Mar 10 19:56:19 2015 -0700 +++ b/hotspot/src/share/vm/oops/method.cpp Fri Mar 13 12:40:39 2015 -0400 @@ -1970,9 +1970,10 @@ // on stack means some method referring to it is also on the stack. constants()->set_on_stack(value); - bool succeeded = _access_flags.set_on_stack(value); - if (value && succeeded) { - MetadataOnStackMark::record(this, Thread::current()); + bool already_set = on_stack(); + _access_flags.set_on_stack(value); + if (value && !already_set) { + MetadataOnStackMark::record(this); } }