167 ~ClassLoaderData();
168
169 // The CLD are not placed in the Heap, so the Card Table or
170 // the Mod Union Table can't be used to mark when CLD have modified oops.
171 // The CT and MUT bits saves this information for the whole class loader data.
172 void clear_modified_oops() { _modified_oops = false; }
173 public:
174 void record_modified_oops() { _modified_oops = true; }
175 bool has_modified_oops() { return _modified_oops; }
176
177 oop holder_no_keepalive() const;
178 oop holder() const;
179
180 private:
181 void unload();
182 bool keep_alive() const { return _keep_alive > 0; }
183
184 void classes_do(void f(Klass* const));
185 void loaded_classes_do(KlassClosure* klass_closure);
186 void classes_do(void f(InstanceKlass*));
187 void methods_do(void f(Method*));
188 void modules_do(void f(ModuleEntry*));
189 void packages_do(void f(PackageEntry*));
190
191 // Deallocate free list during class unloading.
192 void free_deallocate_list(); // for the classes that are not unloaded
193 void free_deallocate_list_C_heap_structures(); // for the classes that are unloaded
194
195 Dictionary* create_dictionary();
196
197 void initialize_name(Handle class_loader);
198
199 public:
200 // GC interface.
201
202 // The "claim" is typically used to check if oops_do needs to be applied on
203 // the CLD or not. Most GCs only perform strong marking during the marking phase.
204 enum Claim {
205 _claim_none = 0,
206 _claim_finalizable = 2,
|
167 ~ClassLoaderData();
168
169 // The CLD are not placed in the Heap, so the Card Table or
170 // the Mod Union Table can't be used to mark when CLD have modified oops.
171 // The CT and MUT bits saves this information for the whole class loader data.
172 void clear_modified_oops() { _modified_oops = false; }
173 public:
174 void record_modified_oops() { _modified_oops = true; }
175 bool has_modified_oops() { return _modified_oops; }
176
177 oop holder_no_keepalive() const;
178 oop holder() const;
179
180 private:
181 void unload();
182 bool keep_alive() const { return _keep_alive > 0; }
183
184 void classes_do(void f(Klass* const));
185 void loaded_classes_do(KlassClosure* klass_closure);
186 void classes_do(void f(InstanceKlass*));
187 void inline_classes_do(void f(InlineKlass*));
188 void methods_do(void f(Method*));
189 void modules_do(void f(ModuleEntry*));
190 void packages_do(void f(PackageEntry*));
191
192 // Deallocate free list during class unloading.
193 void free_deallocate_list(); // for the classes that are not unloaded
194 void free_deallocate_list_C_heap_structures(); // for the classes that are unloaded
195
196 Dictionary* create_dictionary();
197
198 void initialize_name(Handle class_loader);
199
200 public:
201 // GC interface.
202
203 // The "claim" is typically used to check if oops_do needs to be applied on
204 // the CLD or not. Most GCs only perform strong marking during the marking phase.
205 enum Claim {
206 _claim_none = 0,
207 _claim_finalizable = 2,
|