1 /*
2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "classfile/classLoaderDataGraph.inline.hpp"
27 #include "classfile/dictionary.hpp"
28 #include "classfile/javaClasses.hpp"
29 #include "classfile/metadataOnStackMark.hpp"
30 #include "classfile/moduleEntry.hpp"
31 #include "classfile/packageEntry.hpp"
32 #include "code/dependencyContext.hpp"
33 #include "logging/log.hpp"
34 #include "logging/logStream.hpp"
35 #include "memory/allocation.inline.hpp"
36 #include "memory/metaspace.hpp"
37 #include "memory/resourceArea.hpp"
38 #include "runtime/atomic.hpp"
39 #include "runtime/handles.inline.hpp"
40 #include "runtime/mutex.hpp"
41 #include "runtime/safepoint.hpp"
42 #include "runtime/safepointVerifiers.hpp"
43 #include "utilities/growableArray.hpp"
44 #include "utilities/macros.hpp"
45 #include "utilities/ostream.hpp"
46
47 volatile size_t ClassLoaderDataGraph::_num_array_classes = 0;
48 volatile size_t ClassLoaderDataGraph::_num_instance_classes = 0;
49
clear_claimed_marks()50 void ClassLoaderDataGraph::clear_claimed_marks() {
51 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
52 cld->clear_claim();
53 }
54 }
55
56 // Class iterator used by the compiler. It gets some number of classes at
57 // a safepoint to decay invocation counters on the methods.
58 class ClassLoaderDataGraphKlassIteratorStatic {
59 ClassLoaderData* _current_loader_data;
60 Klass* _current_class_entry;
61 public:
62
ClassLoaderDataGraphKlassIteratorStatic()63 ClassLoaderDataGraphKlassIteratorStatic() : _current_loader_data(NULL), _current_class_entry(NULL) {}
64
try_get_next_class()65 InstanceKlass* try_get_next_class() {
66 assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
67 size_t max_classes = ClassLoaderDataGraph::num_instance_classes();
68 assert(max_classes > 0, "should not be called with no instance classes");
69 for (size_t i = 0; i < max_classes; ) {
70
71 if (_current_class_entry != NULL) {
72 Klass* k = _current_class_entry;
73 _current_class_entry = _current_class_entry->next_link();
74
75 if (k->is_instance_klass()) {
76 InstanceKlass* ik = InstanceKlass::cast(k);
77 i++; // count all instance classes found
78 // Not yet loaded classes are counted in max_classes
79 // but only return loaded classes.
80 if (ik->is_loaded()) {
81 return ik;
82 }
83 }
84 } else {
85 // Go to next CLD
86 if (_current_loader_data != NULL) {
87 _current_loader_data = _current_loader_data->next();
88 }
89 // Start at the beginning
90 if (_current_loader_data == NULL) {
91 _current_loader_data = ClassLoaderDataGraph::_head;
92 }
93
94 _current_class_entry = _current_loader_data->klasses();
95 }
96 }
97 // Should never be reached unless all instance classes have failed or are not fully loaded.
98 // Caller handles NULL.
99 return NULL;
100 }
101
102 // If the current class for the static iterator is a class being unloaded or
103 // deallocated, adjust the current class.
adjust_saved_class(ClassLoaderData * cld)104 void adjust_saved_class(ClassLoaderData* cld) {
105 if (_current_loader_data == cld) {
106 _current_loader_data = cld->next();
107 if (_current_loader_data != NULL) {
108 _current_class_entry = _current_loader_data->klasses();
109 } // else try_get_next_class will start at the head
110 }
111 }
112
adjust_saved_class(Klass * klass)113 void adjust_saved_class(Klass* klass) {
114 if (_current_class_entry == klass) {
115 _current_class_entry = klass->next_link();
116 }
117 }
118 };
119
120 static ClassLoaderDataGraphKlassIteratorStatic static_klass_iterator;
121
try_get_next_class()122 InstanceKlass* ClassLoaderDataGraph::try_get_next_class() {
123 assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
124 return static_klass_iterator.try_get_next_class();
125 }
126
adjust_saved_class(ClassLoaderData * cld)127 void ClassLoaderDataGraph::adjust_saved_class(ClassLoaderData* cld) {
128 return static_klass_iterator.adjust_saved_class(cld);
129 }
130
adjust_saved_class(Klass * klass)131 void ClassLoaderDataGraph::adjust_saved_class(Klass* klass) {
132 return static_klass_iterator.adjust_saved_class(klass);
133 }
134
clean_deallocate_lists(bool walk_previous_versions)135 void ClassLoaderDataGraph::clean_deallocate_lists(bool walk_previous_versions) {
136 assert(SafepointSynchronize::is_at_safepoint(), "must only be called at safepoint");
137 uint loaders_processed = 0;
138 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
139 // is_alive check will be necessary for concurrent class unloading.
140 if (cld->is_alive()) {
141 // clean metaspace
142 if (walk_previous_versions) {
143 cld->classes_do(InstanceKlass::purge_previous_versions);
144 }
145 cld->free_deallocate_list();
146 loaders_processed++;
147 }
148 }
149 log_debug(class, loader, data)("clean_deallocate_lists: loaders processed %u %s",
150 loaders_processed, walk_previous_versions ? "walk_previous_versions" : "");
151 }
152
walk_metadata_and_clean_metaspaces()153 void ClassLoaderDataGraph::walk_metadata_and_clean_metaspaces() {
154 assert(SafepointSynchronize::is_at_safepoint(), "must only be called at safepoint");
155
156 _should_clean_deallocate_lists = false; // assume everything gets cleaned
157
158 // Mark metadata seen on the stack so we can delete unreferenced entries.
159 // Walk all metadata, including the expensive code cache walk, only for class redefinition.
160 // The MetadataOnStackMark walk during redefinition saves previous versions if it finds old methods
161 // on the stack or in the code cache, so we only have to repeat the full walk if
162 // they were found at that time.
163 // TODO: have redefinition clean old methods out of the code cache. They still exist in some places.
164 bool walk_all_metadata = InstanceKlass::has_previous_versions_and_reset();
165
166 MetadataOnStackMark md_on_stack(walk_all_metadata);
167 clean_deallocate_lists(walk_all_metadata);
168 }
169
170 // GC root of class loader data created.
171 ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
172 ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
173 ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL;
174 ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
175
176 bool ClassLoaderDataGraph::_should_purge = false;
177 bool ClassLoaderDataGraph::_should_clean_deallocate_lists = false;
178 bool ClassLoaderDataGraph::_safepoint_cleanup_needed = false;
179 bool ClassLoaderDataGraph::_metaspace_oom = false;
180
181 // Add a new class loader data node to the list. Assign the newly created
182 // ClassLoaderData into the java/lang/ClassLoader object as a hidden field
add_to_graph(Handle loader,bool is_unsafe_anonymous)183 ClassLoaderData* ClassLoaderDataGraph::add_to_graph(Handle loader, bool is_unsafe_anonymous) {
184
185 assert_lock_strong(ClassLoaderDataGraph_lock);
186
187 ClassLoaderData* cld;
188
189 // First check if another thread beat us to creating the CLD and installing
190 // it into the loader while we were waiting for the lock.
191 if (!is_unsafe_anonymous && loader.not_null()) {
192 cld = java_lang_ClassLoader::loader_data_acquire(loader());
193 if (cld != NULL) {
194 return cld;
195 }
196 }
197
198 // We mustn't GC until we've installed the ClassLoaderData in the Graph since the CLD
199 // contains oops in _handles that must be walked. GC doesn't walk CLD from the
200 // loader oop in all collections, particularly young collections.
201 NoSafepointVerifier no_safepoints;
202
203 cld = new ClassLoaderData(loader, is_unsafe_anonymous);
204
205 // First install the new CLD to the Graph.
206 cld->set_next(_head);
207 _head = cld;
208
209 // Next associate with the class_loader.
210 if (!is_unsafe_anonymous) {
211 // Use OrderAccess, since readers need to get the loader_data only after
212 // it's added to the Graph
213 java_lang_ClassLoader::release_set_loader_data(loader(), cld);
214 }
215
216 // Lastly log, if requested
217 LogTarget(Trace, class, loader, data) lt;
218 if (lt.is_enabled()) {
219 ResourceMark rm;
220 LogStream ls(lt);
221 ls.print("create ");
222 cld->print_value_on(&ls);
223 ls.cr();
224 }
225 return cld;
226 }
227
add(Handle loader,bool is_unsafe_anonymous)228 ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_unsafe_anonymous) {
229 MutexLocker ml(ClassLoaderDataGraph_lock);
230 ClassLoaderData* loader_data = add_to_graph(loader, is_unsafe_anonymous);
231 return loader_data;
232 }
233
cld_unloading_do(CLDClosure * cl)234 void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
235 assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
236 // Only walk the head until any clds not purged from prior unloading
237 // (CMS doesn't purge right away).
238 for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
239 assert(cld->is_unloading(), "invariant");
240 cl->do_cld(cld);
241 }
242 }
243
244 // These are functions called by the GC, which require all of the CLDs, including the
245 // unloading ones.
cld_do(CLDClosure * cl)246 void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
247 assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
248 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->_next) {
249 cl->do_cld(cld);
250 }
251 }
252
roots_cld_do(CLDClosure * strong,CLDClosure * weak)253 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
254 assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
255 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->_next) {
256 CLDClosure* closure = cld->keep_alive() ? strong : weak;
257 if (closure != NULL) {
258 closure->do_cld(cld);
259 }
260 }
261 }
262
always_strong_cld_do(CLDClosure * cl)263 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
264 assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
265 if (ClassUnloading) {
266 roots_cld_do(cl, NULL);
267 } else {
268 cld_do(cl);
269 }
270 }
271
272 // Closure for locking and iterating through classes.
LockedClassesDo(classes_do_func_t f)273 LockedClassesDo::LockedClassesDo(classes_do_func_t f) : _function(f) {
274 ClassLoaderDataGraph_lock->lock();
275 }
276
LockedClassesDo()277 LockedClassesDo::LockedClassesDo() : _function(NULL) {
278 // callers provide their own do_klass
279 ClassLoaderDataGraph_lock->lock();
280 }
281
~LockedClassesDo()282 LockedClassesDo::~LockedClassesDo() { ClassLoaderDataGraph_lock->unlock(); }
283
284
285 // Iterating over the CLDG needs to be locked because
286 // unloading can remove entries concurrently soon.
287 class ClassLoaderDataGraphIterator : public StackObj {
288 ClassLoaderData* _next;
289 HandleMark _hm; // clean up handles when this is done.
290 Handle _holder;
291 Thread* _thread;
292 NoSafepointVerifier _nsv; // No safepoints allowed in this scope
293 // unless verifying at a safepoint.
294
295 public:
ClassLoaderDataGraphIterator()296 ClassLoaderDataGraphIterator() : _next(ClassLoaderDataGraph::_head),
297 _nsv(true, !SafepointSynchronize::is_at_safepoint()) {
298 _thread = Thread::current();
299 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
300 }
301
get_next()302 ClassLoaderData* get_next() {
303 ClassLoaderData* cld = _next;
304 // Skip already unloaded CLD for concurrent unloading.
305 while (cld != NULL && !cld->is_alive()) {
306 cld = cld->next();
307 }
308 if (cld != NULL) {
309 // Keep cld that is being returned alive.
310 _holder = Handle(_thread, cld->holder_phantom());
311 _next = cld->next();
312 } else {
313 _next = NULL;
314 }
315 return cld;
316 }
317 };
318
loaded_cld_do(CLDClosure * cl)319 void ClassLoaderDataGraph::loaded_cld_do(CLDClosure* cl) {
320 ClassLoaderDataGraphIterator iter;
321 while (ClassLoaderData* cld = iter.get_next()) {
322 cl->do_cld(cld);
323 }
324 }
325
326 // These functions assume that the caller has locked the ClassLoaderDataGraph_lock
327 // if they are not calling the function from a safepoint.
classes_do(KlassClosure * klass_closure)328 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
329 ClassLoaderDataGraphIterator iter;
330 while (ClassLoaderData* cld = iter.get_next()) {
331 cld->classes_do(klass_closure);
332 }
333 }
334
classes_do(void f (Klass * const))335 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
336 ClassLoaderDataGraphIterator iter;
337 while (ClassLoaderData* cld = iter.get_next()) {
338 cld->classes_do(f);
339 }
340 }
341
methods_do(void f (Method *))342 void ClassLoaderDataGraph::methods_do(void f(Method*)) {
343 ClassLoaderDataGraphIterator iter;
344 while (ClassLoaderData* cld = iter.get_next()) {
345 cld->methods_do(f);
346 }
347 }
348
modules_do(void f (ModuleEntry *))349 void ClassLoaderDataGraph::modules_do(void f(ModuleEntry*)) {
350 assert_locked_or_safepoint(Module_lock);
351 ClassLoaderDataGraphIterator iter;
352 while (ClassLoaderData* cld = iter.get_next()) {
353 cld->modules_do(f);
354 }
355 }
356
modules_unloading_do(void f (ModuleEntry *))357 void ClassLoaderDataGraph::modules_unloading_do(void f(ModuleEntry*)) {
358 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
359 // Only walk the head until any clds not purged from prior unloading
360 // (CMS doesn't purge right away).
361 for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
362 assert(cld->is_unloading(), "invariant");
363 cld->modules_do(f);
364 }
365 }
366
packages_do(void f (PackageEntry *))367 void ClassLoaderDataGraph::packages_do(void f(PackageEntry*)) {
368 assert_locked_or_safepoint(Module_lock);
369 ClassLoaderDataGraphIterator iter;
370 while (ClassLoaderData* cld = iter.get_next()) {
371 cld->packages_do(f);
372 }
373 }
374
packages_unloading_do(void f (PackageEntry *))375 void ClassLoaderDataGraph::packages_unloading_do(void f(PackageEntry*)) {
376 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
377 // Only walk the head until any clds not purged from prior unloading
378 // (CMS doesn't purge right away).
379 for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
380 assert(cld->is_unloading(), "invariant");
381 cld->packages_do(f);
382 }
383 }
384
loaded_classes_do(KlassClosure * klass_closure)385 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
386 ClassLoaderDataGraphIterator iter;
387 while (ClassLoaderData* cld = iter.get_next()) {
388 cld->loaded_classes_do(klass_closure);
389 }
390 }
391
392 // This case can block but cannot do unloading (called from CDS)
unlocked_loaded_classes_do(KlassClosure * klass_closure)393 void ClassLoaderDataGraph::unlocked_loaded_classes_do(KlassClosure* klass_closure) {
394 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
395 cld->loaded_classes_do(klass_closure);
396 }
397 }
398
399
classes_unloading_do(void f (Klass * const))400 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
401 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
402 // Only walk the head until any clds not purged from prior unloading
403 // (CMS doesn't purge right away).
404 for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
405 assert(cld->is_unloading(), "invariant");
406 cld->classes_do(f);
407 }
408 }
409
410 #define FOR_ALL_DICTIONARY(X) ClassLoaderDataGraphIterator iter; \
411 while (ClassLoaderData* X = iter.get_next()) \
412 if (X->dictionary() != NULL)
413
414 // Walk classes in the loaded class dictionaries in various forms.
415 // Only walks the classes defined in this class loader.
dictionary_classes_do(void f (InstanceKlass *))416 void ClassLoaderDataGraph::dictionary_classes_do(void f(InstanceKlass*)) {
417 FOR_ALL_DICTIONARY(cld) {
418 cld->dictionary()->classes_do(f);
419 }
420 }
421
422 // Only walks the classes defined in this class loader.
dictionary_classes_do(void f (InstanceKlass *,TRAPS),TRAPS)423 void ClassLoaderDataGraph::dictionary_classes_do(void f(InstanceKlass*, TRAPS), TRAPS) {
424 FOR_ALL_DICTIONARY(cld) {
425 cld->dictionary()->classes_do(f, CHECK);
426 }
427 }
428
verify_dictionary()429 void ClassLoaderDataGraph::verify_dictionary() {
430 FOR_ALL_DICTIONARY(cld) {
431 cld->dictionary()->verify();
432 }
433 }
434
print_dictionary(outputStream * st)435 void ClassLoaderDataGraph::print_dictionary(outputStream* st) {
436 FOR_ALL_DICTIONARY(cld) {
437 st->print("Dictionary for ");
438 cld->print_value_on(st);
439 st->cr();
440 cld->dictionary()->print_on(st);
441 st->cr();
442 }
443 }
444
print_dictionary_statistics(outputStream * st)445 void ClassLoaderDataGraph::print_dictionary_statistics(outputStream* st) {
446 FOR_ALL_DICTIONARY(cld) {
447 ResourceMark rm;
448 stringStream tempst;
449 tempst.print("System Dictionary for %s class loader", cld->loader_name_and_id());
450 cld->dictionary()->print_table_statistics(st, tempst.as_string());
451 }
452 }
453
new_clds()454 GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
455 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
456 assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
457
458 GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();
459
460 // The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true);
461 ClassLoaderData* curr = _head;
462 while (curr != _saved_head) {
463 if (!curr->claimed()) {
464 array->push(curr);
465 LogTarget(Debug, class, loader, data) lt;
466 if (lt.is_enabled()) {
467 LogStream ls(lt);
468 ls.print("found new CLD: ");
469 curr->print_value_on(&ls);
470 ls.cr();
471 }
472 }
473
474 curr = curr->_next;
475 }
476
477 return array;
478 }
479
480 #ifndef PRODUCT
contains_loader_data(ClassLoaderData * loader_data)481 bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
482 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
483 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
484 if (loader_data == data) {
485 return true;
486 }
487 }
488
489 return false;
490 }
491 #endif // PRODUCT
492
is_valid(ClassLoaderData * loader_data)493 bool ClassLoaderDataGraph::is_valid(ClassLoaderData* loader_data) {
494 DEBUG_ONLY( if (!VMError::is_error_reported()) { assert_locked_or_safepoint(ClassLoaderDataGraph_lock); } )
495 if (loader_data != NULL) {
496 if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
497 return true;
498 }
499 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
500 if (loader_data == data) {
501 return true;
502 }
503 }
504 }
505 return false;
506 }
507
508 // Move class loader data from main list to the unloaded list for unloading
509 // and deallocation later.
do_unloading()510 bool ClassLoaderDataGraph::do_unloading() {
511 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
512
513 // Indicate whether safepoint cleanup is needed.
514 _safepoint_cleanup_needed = true;
515
516 ClassLoaderData* data = _head;
517 ClassLoaderData* prev = NULL;
518 bool seen_dead_loader = false;
519 uint loaders_processed = 0;
520 uint loaders_removed = 0;
521
522 // Save previous _unloading pointer for CMS which may add to unloading list before
523 // purging and we don't want to rewalk the previously unloaded class loader data.
524 _saved_unloading = _unloading;
525
526 data = _head;
527 while (data != NULL) {
528 if (data->is_alive()) {
529 prev = data;
530 data = data->next();
531 loaders_processed++;
532 continue;
533 }
534 seen_dead_loader = true;
535 loaders_removed++;
536 ClassLoaderData* dead = data;
537 dead->unload();
538 data = data->next();
539 // Remove from loader list.
540 // This class loader data will no longer be found
541 // in the ClassLoaderDataGraph.
542 if (prev != NULL) {
543 prev->set_next(data);
544 } else {
545 assert(dead == _head, "sanity check");
546 _head = data;
547 }
548 dead->set_next(_unloading);
549 _unloading = dead;
550 }
551
552 log_debug(class, loader, data)("do_unloading: loaders processed %u, loaders removed %u", loaders_processed, loaders_removed);
553
554 return seen_dead_loader;
555 }
556
557 // There's at least one dead class loader. Purge refererences of healthy module
558 // reads lists and package export lists to modules belonging to dead loaders.
clean_module_and_package_info()559 void ClassLoaderDataGraph::clean_module_and_package_info() {
560 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
561
562 ClassLoaderData* data = _head;
563 while (data != NULL) {
564 // Walk a ModuleEntry's reads, and a PackageEntry's exports
565 // lists to determine if there are modules on those lists that are now
566 // dead and should be removed. A module's life cycle is equivalent
567 // to its defining class loader's life cycle. Since a module is
568 // considered dead if its class loader is dead, these walks must
569 // occur after each class loader's aliveness is determined.
570 if (data->packages() != NULL) {
571 data->packages()->purge_all_package_exports();
572 }
573 if (data->modules_defined()) {
574 data->modules()->purge_all_module_reads();
575 }
576 data = data->next();
577 }
578 }
579
purge()580 void ClassLoaderDataGraph::purge() {
581 ClassLoaderData* list = _unloading;
582 _unloading = NULL;
583 ClassLoaderData* next = list;
584 bool classes_unloaded = false;
585 while (next != NULL) {
586 ClassLoaderData* purge_me = next;
587 next = purge_me->next();
588 delete purge_me;
589 classes_unloaded = true;
590 }
591 if (classes_unloaded) {
592 Metaspace::purge();
593 set_metaspace_oom(false);
594 }
595 DependencyContext::purge_dependency_contexts();
596 }
597
resize_if_needed()598 int ClassLoaderDataGraph::resize_if_needed() {
599 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
600 int resized = 0;
601 if (Dictionary::does_any_dictionary_needs_resizing()) {
602 FOR_ALL_DICTIONARY(cld) {
603 if (cld->dictionary()->resize_if_needed()) {
604 resized++;
605 }
606 }
607 }
608 return resized;
609 }
610
ClassLoaderDataGraphKlassIteratorAtomic()611 ClassLoaderDataGraphKlassIteratorAtomic::ClassLoaderDataGraphKlassIteratorAtomic()
612 : _next_klass(NULL) {
613 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
614 ClassLoaderData* cld = ClassLoaderDataGraph::_head;
615 Klass* klass = NULL;
616
617 // Find the first klass in the CLDG.
618 while (cld != NULL) {
619 assert_locked_or_safepoint(cld->metaspace_lock());
620 klass = cld->_klasses;
621 if (klass != NULL) {
622 _next_klass = klass;
623 return;
624 }
625 cld = cld->next();
626 }
627 }
628
next_klass_in_cldg(Klass * klass)629 Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass_in_cldg(Klass* klass) {
630 Klass* next = klass->next_link();
631 if (next != NULL) {
632 return next;
633 }
634
635 // No more klasses in the current CLD. Time to find a new CLD.
636 ClassLoaderData* cld = klass->class_loader_data();
637 assert_locked_or_safepoint(cld->metaspace_lock());
638 while (next == NULL) {
639 cld = cld->next();
640 if (cld == NULL) {
641 break;
642 }
643 next = cld->_klasses;
644 }
645
646 return next;
647 }
648
next_klass()649 Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass() {
650 Klass* head = _next_klass;
651
652 while (head != NULL) {
653 Klass* next = next_klass_in_cldg(head);
654
655 Klass* old_head = Atomic::cmpxchg(next, &_next_klass, head);
656
657 if (old_head == head) {
658 return head; // Won the CAS.
659 }
660
661 head = old_head;
662 }
663
664 // Nothing more for the iterator to hand out.
665 assert(head == NULL, "head is " PTR_FORMAT ", expected not null:", p2i(head));
666 return NULL;
667 }
668
ClassLoaderDataGraphMetaspaceIterator()669 ClassLoaderDataGraphMetaspaceIterator::ClassLoaderDataGraphMetaspaceIterator() {
670 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
671 _data = ClassLoaderDataGraph::_head;
672 }
673
~ClassLoaderDataGraphMetaspaceIterator()674 ClassLoaderDataGraphMetaspaceIterator::~ClassLoaderDataGraphMetaspaceIterator() {}
675
get_next()676 ClassLoaderMetaspace* ClassLoaderDataGraphMetaspaceIterator::get_next() {
677 assert(_data != NULL, "Should not be NULL in call to the iterator");
678 ClassLoaderMetaspace* result = _data->metaspace_or_null();
679 _data = _data->next();
680 // This result might be NULL for class loaders without metaspace
681 // yet. It would be nice to return only non-null results but
682 // there is no guarantee that there will be a non-null result
683 // down the list so the caller is going to have to check.
684 return result;
685 }
686
687 #ifndef PRODUCT
688 // callable from debugger
print_loader_data_graph()689 extern "C" int print_loader_data_graph() {
690 ResourceMark rm;
691 ClassLoaderDataGraph::print_on(tty);
692 return 0;
693 }
694
verify()695 void ClassLoaderDataGraph::verify() {
696 ClassLoaderDataGraphIterator iter;
697 while (ClassLoaderData* cld = iter.get_next()) {
698 cld->verify();
699 }
700 }
701
print_on(outputStream * const out)702 void ClassLoaderDataGraph::print_on(outputStream * const out) {
703 ClassLoaderDataGraphIterator iter;
704 while (ClassLoaderData* cld = iter.get_next()) {
705 cld->print_on(out);
706 }
707 }
708 #endif // PRODUCT
709