112 return (loader_data->is_the_null_class_loader_data() || !ClassUnloading);
113 }
114
115 // Unload (that is, break root links to) all unmarked classes and loaders.
116 void do_unloading();
117
118 // Protection domains
119 Klass* find(int index, unsigned int hash, Symbol* name,
120 ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
121 bool is_valid_protection_domain(int index, unsigned int hash,
122 Symbol* name, ClassLoaderData* loader_data,
123 Handle protection_domain);
124 void add_protection_domain(int index, unsigned int hash,
125 instanceKlassHandle klass, ClassLoaderData* loader_data,
126 Handle protection_domain, TRAPS);
127
128 // Sharing support
129 void reorder_dictionary();
130
131 ProtectionDomainCacheEntry* cache_get(oop protection_domain);
132
133 void print(bool details = true);
134 void verify();
135 };
136
137 // The following classes can be in dictionary.cpp, but we need these
138 // to be in header file so that SA's vmStructs can access them.
139 class ProtectionDomainCacheEntry : public HashtableEntry<oop, mtClass> {
140 friend class VMStructs;
141 private:
142 // Flag indicating whether this protection domain entry is strongly reachable.
143 // Used during iterating over the system dictionary to remember oops that need
144 // to be updated.
145 bool _strongly_reachable;
146 public:
147 oop protection_domain() { return literal(); }
148
149 void init() {
150 _strongly_reachable = false;
151 }
|
112 return (loader_data->is_the_null_class_loader_data() || !ClassUnloading);
113 }
114
115 // Unload (that is, break root links to) all unmarked classes and loaders.
116 void do_unloading();
117
118 // Protection domains
119 Klass* find(int index, unsigned int hash, Symbol* name,
120 ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
121 bool is_valid_protection_domain(int index, unsigned int hash,
122 Symbol* name, ClassLoaderData* loader_data,
123 Handle protection_domain);
124 void add_protection_domain(int index, unsigned int hash,
125 instanceKlassHandle klass, ClassLoaderData* loader_data,
126 Handle protection_domain, TRAPS);
127
128 // Sharing support
129 void reorder_dictionary();
130
131 ProtectionDomainCacheEntry* cache_get(oop protection_domain);
132 ProtectionDomainCacheTable* pd_cache_table() { return _pd_cache_table; }
133
134 void print(bool details = true);
135 void verify();
136 };
137
138 // The following classes can be in dictionary.cpp, but we need these
139 // to be in header file so that SA's vmStructs can access them.
140 class ProtectionDomainCacheEntry : public HashtableEntry<oop, mtClass> {
141 friend class VMStructs;
142 private:
143 // Flag indicating whether this protection domain entry is strongly reachable.
144 // Used during iterating over the system dictionary to remember oops that need
145 // to be updated.
146 bool _strongly_reachable;
147 public:
148 oop protection_domain() { return literal(); }
149
150 void init() {
151 _strongly_reachable = false;
152 }
|