8061205: MetadataOnStackMark only needs to walk code cache during class redefinition

Only do full metadata walk during class redefinition and only walk handles during class unloading.

Reviewed-by: sspitsyn, stefank
This commit is contained in:
Coleen Phillimore 2015-03-13 12:40:39 -04:00
parent 984cf4c9b5
commit 7b384c6958
19 changed files with 147 additions and 248 deletions

View file

@ -1970,9 +1970,10 @@ void Method::set_on_stack(const bool value) {
// 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);
}
}