39 NOT_PRODUCT(bool MetadataOnStackMark::_is_active = false;) |
39 NOT_PRODUCT(bool MetadataOnStackMark::_is_active = false;) |
40 |
40 |
41 // Walk metadata on the stack and mark it so that redefinition doesn't delete |
41 // Walk metadata on the stack and mark it so that redefinition doesn't delete |
42 // it. Class unloading also walks the previous versions and might try to |
42 // it. Class unloading also walks the previous versions and might try to |
43 // delete it, so this class is used by class unloading also. |
43 // delete it, so this class is used by class unloading also. |
44 MetadataOnStackMark::MetadataOnStackMark(bool visit_code_cache) { |
44 MetadataOnStackMark::MetadataOnStackMark(bool has_redefined_a_class) { |
45 assert(SafepointSynchronize::is_at_safepoint(), "sanity check"); |
45 assert(SafepointSynchronize::is_at_safepoint(), "sanity check"); |
46 assert(_used_buffers == NULL, "sanity check"); |
46 assert(_used_buffers == NULL, "sanity check"); |
47 NOT_PRODUCT(_is_active = true;) |
47 NOT_PRODUCT(_is_active = true;) |
48 |
48 |
49 Threads::metadata_do(Metadata::mark_on_stack); |
49 Threads::metadata_do(Metadata::mark_on_stack); |
50 if (visit_code_cache) { |
50 if (has_redefined_a_class) { |
51 CodeCache::alive_nmethods_do(nmethod::mark_on_stack); |
51 CodeCache::alive_nmethods_do(nmethod::mark_on_stack); |
52 } |
52 } |
53 CompileBroker::mark_on_stack(); |
53 CompileBroker::mark_on_stack(); |
54 JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack); |
54 JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack); |
55 ThreadService::metadata_do(Metadata::mark_on_stack); |
55 ThreadService::metadata_do(Metadata::mark_on_stack); |