44 void DumpTimeSharedClassTable::iterate_all_live_classes(Function function) const {
45 auto wrapper = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
46 assert(SafepointSynchronize::is_at_safepoint(), "invariant");
47 assert_lock_strong(DumpTimeTable_lock);
48 if (CDSConfig::is_dumping_final_static_archive() && !k->is_loaded()) {
49 assert(k->is_shared_unregistered_class(), "must be");
50 function(k, info);
51 } else if (k->is_loader_alive()) {
52 function(k, info);
53 assert(k->is_loader_alive(), "must not change");
54 } else {
55 if (!SystemDictionaryShared::is_excluded_class(k)) {
56 SystemDictionaryShared::warn_excluded(k, "Class loader not alive");
57 SystemDictionaryShared::set_excluded_locked(k);
58 }
59 }
60 };
61 DumpTimeSharedClassTableBaseType::iterate_all(wrapper);
62 }
63
64
65 template<class ITER>
66 void DumpTimeSharedClassTable::iterate_all_live_classes(ITER* iter) const {
67 auto function = [&] (InstanceKlass* k, DumpTimeClassInfo& v) {
68 iter->do_entry(k, v);
69 };
70 iterate_all_live_classes(function);
71 }
72
73 #endif // INCLUDE_CDS
74
75 #endif // SHARE_CDS_DUMPTIMECLASSINFO_INLINE_HPP
|
44 void DumpTimeSharedClassTable::iterate_all_live_classes(Function function) const {
45 auto wrapper = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
46 assert(SafepointSynchronize::is_at_safepoint(), "invariant");
47 assert_lock_strong(DumpTimeTable_lock);
48 if (CDSConfig::is_dumping_final_static_archive() && !k->is_loaded()) {
49 assert(k->is_shared_unregistered_class(), "must be");
50 function(k, info);
51 } else if (k->is_loader_alive()) {
52 function(k, info);
53 assert(k->is_loader_alive(), "must not change");
54 } else {
55 if (!SystemDictionaryShared::is_excluded_class(k)) {
56 SystemDictionaryShared::warn_excluded(k, "Class loader not alive");
57 SystemDictionaryShared::set_excluded_locked(k);
58 }
59 }
60 };
61 DumpTimeSharedClassTableBaseType::iterate_all(wrapper);
62 }
63
64 template<typename Function>
65 void DumpTimeSharedClassTable::iterate_all_classes_in_builtin_loaders(Function function) const {
66 auto wrapper = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
67 assert_lock_strong(DumpTimeTable_lock);
68 // k->class_loader_data() could be null for unreg classes loaded during CDSConfig::is_dumping_final_static_archive()
69 if (k->class_loader_data() != nullptr && SystemDictionaryShared::is_builtin_loader(k->class_loader_data())) {
70 assert(k->is_loader_alive(), "must be");
71 function(k, info);
72 assert(k->is_loader_alive(), "must be");
73 }
74 };
75 DumpTimeSharedClassTableBaseType::iterate_all(wrapper);
76 }
77
78
79 template<class ITER>
80 void DumpTimeSharedClassTable::iterate_all_live_classes(ITER* iter) const {
81 auto function = [&] (InstanceKlass* k, DumpTimeClassInfo& v) {
82 iter->do_entry(k, v);
83 };
84 iterate_all_live_classes(function);
85 }
86
87 #endif // INCLUDE_CDS
88
89 #endif // SHARE_CDS_DUMPTIMECLASSINFO_INLINE_HPP
|