159 JFR_ONLY(DEFINE_TRACE_ID_FIELD;)
160
161 void set_next(ClassLoaderData* next) { _next = next; }
162 ClassLoaderData* next() const { return _next; }
163
164 ClassLoaderData(Handle h_class_loader, bool is_unsafe_anonymous);
165 ~ClassLoaderData();
166
167 // The CLD are not placed in the Heap, so the Card Table or
168 // the Mod Union Table can't be used to mark when CLD have modified oops.
169 // The CT and MUT bits saves this information for the whole class loader data.
170 void clear_modified_oops() { _modified_oops = false; }
171 public:
172 void record_modified_oops() { _modified_oops = true; }
173 bool has_modified_oops() { return _modified_oops; }
174
175 void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = true; }
176 void clear_accumulated_modified_oops() { _accumulated_modified_oops = false; }
177 bool has_accumulated_modified_oops() { return _accumulated_modified_oops; }
178 oop holder_no_keepalive() const;
179
180 private:
181 void unload();
182 bool keep_alive() const { return _keep_alive > 0; }
183
184 oop holder_phantom() const;
185 void classes_do(void f(Klass* const));
186 void loaded_classes_do(KlassClosure* klass_closure);
187 void classes_do(void f(InstanceKlass*));
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 // Allocate out of this class loader data
197 MetaWord* allocate(size_t size);
198
199 Dictionary* create_dictionary();
200
201 void initialize_name(Handle class_loader);
202
203 public:
204 // GC interface.
|
159 JFR_ONLY(DEFINE_TRACE_ID_FIELD;)
160
161 void set_next(ClassLoaderData* next) { _next = next; }
162 ClassLoaderData* next() const { return _next; }
163
164 ClassLoaderData(Handle h_class_loader, bool is_unsafe_anonymous);
165 ~ClassLoaderData();
166
167 // The CLD are not placed in the Heap, so the Card Table or
168 // the Mod Union Table can't be used to mark when CLD have modified oops.
169 // The CT and MUT bits saves this information for the whole class loader data.
170 void clear_modified_oops() { _modified_oops = false; }
171 public:
172 void record_modified_oops() { _modified_oops = true; }
173 bool has_modified_oops() { return _modified_oops; }
174
175 void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = true; }
176 void clear_accumulated_modified_oops() { _accumulated_modified_oops = false; }
177 bool has_accumulated_modified_oops() { return _accumulated_modified_oops; }
178 oop holder_no_keepalive() const;
179 oop holder_phantom() const;
180
181 private:
182 void unload();
183 bool keep_alive() const { return _keep_alive > 0; }
184
185 void classes_do(void f(Klass* const));
186 void loaded_classes_do(KlassClosure* klass_closure);
187 void classes_do(void f(InstanceKlass*));
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 // Allocate out of this class loader data
197 MetaWord* allocate(size_t size);
198
199 Dictionary* create_dictionary();
200
201 void initialize_name(Handle class_loader);
202
203 public:
204 // GC interface.
|