275 ClassLoaderData* next() const { return _next; }
276
277 ClassLoaderData(Handle h_class_loader, bool is_anonymous);
278 ~ClassLoaderData();
279
280 // The CLD are not placed in the Heap, so the Card Table or
281 // the Mod Union Table can't be used to mark when CLD have modified oops.
282 // The CT and MUT bits saves this information for the whole class loader data.
283 void clear_modified_oops() { _modified_oops = false; }
284 public:
285 void record_modified_oops() { _modified_oops = true; }
286 bool has_modified_oops() { return _modified_oops; }
287
288 void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = true; }
289 void clear_accumulated_modified_oops() { _accumulated_modified_oops = false; }
290 bool has_accumulated_modified_oops() { return _accumulated_modified_oops; }
291 private:
292
293 void unload();
294 bool keep_alive() const { return _keep_alive > 0; }
295 void classes_do(void f(Klass*));
296 void loaded_classes_do(KlassClosure* klass_closure);
297 void classes_do(void f(InstanceKlass*));
298 void methods_do(void f(Method*));
299 void modules_do(void f(ModuleEntry*));
300 void packages_do(void f(PackageEntry*));
301
302 // Deallocate free list during class unloading.
303 void free_deallocate_list(); // for the classes that are not unloaded
304 void unload_deallocate_list(); // for the classes that are unloaded
305
306 // Allocate out of this class loader data
307 MetaWord* allocate(size_t size);
308
309 Dictionary* create_dictionary();
310 public:
311 // GC interface.
312 void clear_claimed() { _claimed = 0; }
313 bool claimed() const { return _claimed == 1; }
314 bool claim();
|
275 ClassLoaderData* next() const { return _next; }
276
277 ClassLoaderData(Handle h_class_loader, bool is_anonymous);
278 ~ClassLoaderData();
279
280 // The CLD are not placed in the Heap, so the Card Table or
281 // the Mod Union Table can't be used to mark when CLD have modified oops.
282 // The CT and MUT bits saves this information for the whole class loader data.
283 void clear_modified_oops() { _modified_oops = false; }
284 public:
285 void record_modified_oops() { _modified_oops = true; }
286 bool has_modified_oops() { return _modified_oops; }
287
288 void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = true; }
289 void clear_accumulated_modified_oops() { _accumulated_modified_oops = false; }
290 bool has_accumulated_modified_oops() { return _accumulated_modified_oops; }
291 private:
292
293 void unload();
294 bool keep_alive() const { return _keep_alive > 0; }
295 void ensure_loader_alive();
296 void classes_do(void f(Klass*));
297 void loaded_classes_do(KlassClosure* klass_closure);
298 void classes_do(void f(InstanceKlass*));
299 void methods_do(void f(Method*));
300 void modules_do(void f(ModuleEntry*));
301 void packages_do(void f(PackageEntry*));
302
303 // Deallocate free list during class unloading.
304 void free_deallocate_list(); // for the classes that are not unloaded
305 void unload_deallocate_list(); // for the classes that are unloaded
306
307 // Allocate out of this class loader data
308 MetaWord* allocate(size_t size);
309
310 Dictionary* create_dictionary();
311 public:
312 // GC interface.
313 void clear_claimed() { _claimed = 0; }
314 bool claimed() const { return _claimed == 1; }
315 bool claim();
|