1 /*
   2  * Copyright (c) 2012, 2013, 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 // A ClassLoaderData identifies the full set of class types that a class
  26 // loader's name resolution strategy produces for a given configuration of the
  27 // class loader.
  28 // Class types in the ClassLoaderData may be defined by from class file binaries
  29 // provided by the class loader, or from other class loader it interacts with
  30 // according to its name resolution strategy.
  31 //
  32 // Class loaders that implement a deterministic name resolution strategy
  33 // (including with respect to their delegation behavior), such as the boot, the
  34 // extension, and the system loaders of the JDK's built-in class loader
  35 // hierarchy, always produce the same linkset for a given configuration.
  36 //
  37 // ClassLoaderData carries information related to a linkset (e.g.,
  38 // metaspace holding its klass definitions).
  39 // The System Dictionary and related data structures (e.g., placeholder table,
  40 // loader constraints table) as well as the runtime representation of classes
  41 // only reference ClassLoaderData.
  42 //
  43 // Instances of java.lang.ClassLoader holds a pointer to a ClassLoaderData that
  44 // that represent the loader's "linking domain" in the JVM.
  45 //
  46 // The bootstrap loader (represented by NULL) also has a ClassLoaderData,
  47 // the singleton class the_null_class_loader_data().
  48 
  49 #include "precompiled.hpp"
  50 #include "classfile/classLoaderData.hpp"
  51 #include "classfile/classLoaderData.inline.hpp"
  52 #include "classfile/javaClasses.hpp"
  53 #include "classfile/metadataOnStackMark.hpp"
  54 #include "classfile/systemDictionary.hpp"
  55 #include "code/codeCache.hpp"
  56 #include "memory/gcLocker.hpp"
  57 #include "memory/metadataFactory.hpp"
  58 #include "memory/metaspaceShared.hpp"
  59 #include "memory/oopFactory.hpp"
  60 #include "runtime/jniHandles.hpp"
  61 #include "runtime/mutex.hpp"
  62 #include "runtime/safepoint.hpp"
  63 #include "runtime/synchronizer.hpp"
  64 #include "utilities/growableArray.hpp"
  65 #include "utilities/macros.hpp"
  66 #include "utilities/ostream.hpp"
  67 
  68 #if INCLUDE_TRACE
  69  #include "trace/tracing.hpp"
  70 #endif
  71 
  72 ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL;
  73 
  74 ClassLoaderData::ClassLoaderData(Handle h_class_loader, bool is_anonymous, Dependencies dependencies) :
  75   _class_loader(h_class_loader()),
  76   _is_anonymous(is_anonymous), _keep_alive(is_anonymous), // initially
  77   _metaspace(NULL), _unloading(false), _klasses(NULL),
  78   _claimed(0), _jmethod_ids(NULL), _handles(NULL), _deallocate_list(NULL),
  79   _next(NULL), _dependencies(dependencies),
  80   _metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true)) {
  81     // empty
  82 }
  83 
  84 void ClassLoaderData::init_dependencies(TRAPS) {
  85   assert(!Universe::is_fully_initialized(), "should only be called when initializing");
  86   assert(is_the_null_class_loader_data(), "should only call this for the null class loader");
  87   _dependencies.init(CHECK);
  88 }
  89 
  90 void ClassLoaderData::Dependencies::init(TRAPS) {
  91   // Create empty dependencies array to add to. CMS requires this to be
  92   // an oop so that it can track additions via card marks.  We think.
  93   _list_head = oopFactory::new_objectArray(2, CHECK);
  94 }
  95 
  96 bool ClassLoaderData::claim() {
  97   if (_claimed == 1) {
  98     return false;
  99   }
 100 
 101   return (int) Atomic::cmpxchg(1, &_claimed, 0) == 0;
 102 }
 103 
 104 void ClassLoaderData::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 105   if (must_claim && !claim()) {
 106     return;
 107   }
 108 
 109   f->do_oop(&_class_loader);
 110   _dependencies.oops_do(f);
 111   _handles->oops_do(f);
 112   if (klass_closure != NULL) {
 113     classes_do(klass_closure);
 114   }
 115 }
 116 
 117 void ClassLoaderData::Dependencies::oops_do(OopClosure* f) {
 118   f->do_oop((oop*)&_list_head);
 119 }
 120 
 121 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
 122   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 123     klass_closure->do_klass(k);
 124     assert(k != k->next_link(), "no loops!");
 125   }
 126 }
 127 
 128 void ClassLoaderData::classes_do(void f(Klass * const)) {
 129   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 130     f(k);
 131   }
 132 }
 133 
 134 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
 135   // Lock to avoid classes being modified/added/removed during iteration
 136   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 137   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 138     // Do not filter ArrayKlass oops here...
 139     if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) {
 140       klass_closure->do_klass(k);
 141     }
 142   }
 143 }
 144 
 145 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
 146   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 147     if (k->oop_is_instance()) {
 148       f(InstanceKlass::cast(k));
 149     }
 150     assert(k != k->next_link(), "no loops!");
 151   }
 152 }
 153 
 154 void ClassLoaderData::record_dependency(Klass* k, TRAPS) {
 155   ClassLoaderData * const from_cld = this;
 156   ClassLoaderData * const to_cld = k->class_loader_data();
 157 
 158   // Dependency to the null class loader data doesn't need to be recorded
 159   // because the null class loader data never goes away.
 160   if (to_cld->is_the_null_class_loader_data()) {
 161     return;
 162   }
 163 
 164   oop to;
 165   if (to_cld->is_anonymous()) {
 166     // Anonymous class dependencies are through the mirror.
 167     to = k->java_mirror();
 168   } else {
 169     to = to_cld->class_loader();
 170 
 171     // If from_cld is anonymous, even if it's class_loader is a parent of 'to'
 172     // we still have to add it.  The class_loader won't keep from_cld alive.
 173     if (!from_cld->is_anonymous()) {
 174       // Check that this dependency isn't from the same or parent class_loader
 175       oop from = from_cld->class_loader();
 176 
 177       oop curr = from;
 178       while (curr != NULL) {
 179         if (curr == to) {
 180           return; // this class loader is in the parent list, no need to add it.
 181         }
 182         curr = java_lang_ClassLoader::parent(curr);
 183       }
 184     }
 185   }
 186 
 187   // It's a dependency we won't find through GC, add it. This is relatively rare
 188   // Must handle over GC point.
 189   Handle dependency(THREAD, to);
 190   from_cld->_dependencies.add(dependency, CHECK);
 191 }
 192 
 193 
 194 void ClassLoaderData::Dependencies::add(Handle dependency, TRAPS) {
 195   // Check first if this dependency is already in the list.
 196   // Save a pointer to the last to add to under the lock.
 197   objArrayOop ok = _list_head;
 198   objArrayOop last = NULL;
 199   while (ok != NULL) {
 200     last = ok;
 201     if (ok->obj_at(0) == dependency()) {
 202       // Don't need to add it
 203       return;
 204     }
 205     ok = (objArrayOop)ok->obj_at(1);
 206   }
 207 
 208   // Must handle over GC points
 209   assert (last != NULL, "dependencies should be initialized");
 210   objArrayHandle last_handle(THREAD, last);
 211 
 212   // Create a new dependency node with fields for (class_loader or mirror, next)
 213   objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
 214   deps->obj_at_put(0, dependency());
 215 
 216   // Must handle over GC points
 217   objArrayHandle new_dependency(THREAD, deps);
 218 
 219   // Add the dependency under lock
 220   locked_add(last_handle, new_dependency, THREAD);
 221 }
 222 
 223 void ClassLoaderData::Dependencies::locked_add(objArrayHandle last_handle,
 224                                                objArrayHandle new_dependency,
 225                                                Thread* THREAD) {
 226 
 227   // Have to lock and put the new dependency on the end of the dependency
 228   // array so the card mark for CMS sees that this dependency is new.
 229   // Can probably do this lock free with some effort.
 230   ObjectLocker ol(Handle(THREAD, _list_head), THREAD);
 231 
 232   oop loader_or_mirror = new_dependency->obj_at(0);
 233 
 234   // Since the dependencies are only added, add to the end.
 235   objArrayOop end = last_handle();
 236   objArrayOop last = NULL;
 237   while (end != NULL) {
 238     last = end;
 239     // check again if another thread added it to the end.
 240     if (end->obj_at(0) == loader_or_mirror) {
 241       // Don't need to add it
 242       return;
 243     }
 244     end = (objArrayOop)end->obj_at(1);
 245   }
 246   assert (last != NULL, "dependencies should be initialized");
 247   // fill in the first element with the oop in new_dependency.
 248   if (last->obj_at(0) == NULL) {
 249     last->obj_at_put(0, new_dependency->obj_at(0));
 250   } else {
 251     last->obj_at_put(1, new_dependency());
 252   }
 253 }
 254 
 255 void ClassLoaderDataGraph::clear_claimed_marks() {
 256   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 257     cld->clear_claimed();
 258   }
 259 }
 260 
 261 void ClassLoaderData::add_class(Klass* k) {
 262   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 263   Klass* old_value = _klasses;
 264   k->set_next_link(old_value);
 265   // link the new item into the list
 266   _klasses = k;
 267 
 268   if (TraceClassLoaderData && Verbose && k->class_loader_data() != NULL) {
 269     ResourceMark rm;
 270     tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: "
 271                   PTR_FORMAT " loader: " PTR_FORMAT " %s",
 272                   k,
 273                   k->external_name(),
 274                   k->class_loader_data(),
 275                   (void *)k->class_loader(),
 276                   loader_name());
 277   }
 278 }
 279 
 280 // This is called by InstanceKlass::deallocate_contents() to remove the
 281 // scratch_class for redefine classes.  We need a lock because there it may not
 282 // be called at a safepoint if there's an error.
 283 void ClassLoaderData::remove_class(Klass* scratch_class) {
 284   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 285   Klass* prev = NULL;
 286   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 287     if (k == scratch_class) {
 288       if (prev == NULL) {
 289         _klasses = k->next_link();
 290       } else {
 291         Klass* next = k->next_link();
 292         prev->set_next_link(next);
 293       }
 294       return;
 295     }
 296     prev = k;
 297     assert(k != k->next_link(), "no loops!");
 298   }
 299   ShouldNotReachHere();   // should have found this class!!
 300 }
 301 
 302 void ClassLoaderData::unload() {
 303   _unloading = true;
 304 
 305   // Tell serviceability tools these classes are unloading
 306   classes_do(InstanceKlass::notify_unload_class);
 307 
 308   if (TraceClassLoaderData) {
 309     ResourceMark rm;
 310     tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, this);
 311     tty->print(" for instance "PTR_FORMAT" of %s", (void *)class_loader(),
 312                loader_name());
 313     if (is_anonymous()) {
 314       tty->print(" for anonymous class  "PTR_FORMAT " ", _klasses);
 315     }
 316     tty->print_cr("]");
 317   }
 318 }
 319 
 320 bool ClassLoaderData::is_alive(BoolObjectClosure* is_alive_closure) const {
 321   bool alive =
 322     is_anonymous() ?
 323        is_alive_closure->do_object_b(_klasses->java_mirror()) :
 324        class_loader() == NULL || is_alive_closure->do_object_b(class_loader());
 325   assert(!alive || claimed(), "must be claimed");
 326   return alive;
 327 }
 328 
 329 
 330 ClassLoaderData::~ClassLoaderData() {
 331   // Release C heap structures for all the classes.
 332   classes_do(InstanceKlass::release_C_heap_structures);
 333 
 334   Metaspace *m = _metaspace;
 335   if (m != NULL) {
 336     _metaspace = NULL;
 337     // release the metaspace
 338     delete m;
 339     // release the handles
 340     if (_handles != NULL) {
 341       JNIHandleBlock::release_block(_handles);
 342       _handles = NULL;
 343     }
 344   }
 345 
 346   // Clear all the JNI handles for methods
 347   // These aren't deallocated and are going to look like a leak, but that's
 348   // needed because we can't really get rid of jmethodIDs because we don't
 349   // know when native code is going to stop using them.  The spec says that
 350   // they're "invalid" but existing programs likely rely on their being
 351   // NULL after class unloading.
 352   if (_jmethod_ids != NULL) {
 353     Method::clear_jmethod_ids(this);
 354   }
 355   // Delete lock
 356   delete _metaspace_lock;
 357 
 358   // Delete free list
 359   if (_deallocate_list != NULL) {
 360     delete _deallocate_list;
 361   }
 362 }
 363 
 364 /**
 365  * Returns true if this class loader data is for the extension class loader.
 366  */
 367 bool ClassLoaderData::is_ext_class_loader_data() const {
 368   return SystemDictionary::is_ext_class_loader(class_loader());
 369 }
 370 
 371 Metaspace* ClassLoaderData::metaspace_non_null() {
 372   assert(!DumpSharedSpaces, "wrong metaspace!");
 373   // If the metaspace has not been allocated, create a new one.  Might want
 374   // to create smaller arena for Reflection class loaders also.
 375   // The reason for the delayed allocation is because some class loaders are
 376   // simply for delegating with no metadata of their own.
 377   if (_metaspace == NULL) {
 378     MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 379     // Check again if metaspace has been allocated while we were getting this lock.
 380     if (_metaspace != NULL) {
 381       return _metaspace;
 382     }
 383     if (this == the_null_class_loader_data()) {
 384       assert (class_loader() == NULL, "Must be");
 385       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType));
 386     } else if (is_anonymous()) {
 387       if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
 388         tty->print_cr("is_anonymous: %s", class_loader()->klass()->internal_name());
 389       }
 390       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::AnonymousMetaspaceType));
 391     } else if (class_loader()->is_a(SystemDictionary::reflect_DelegatingClassLoader_klass())) {
 392       if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
 393         tty->print_cr("is_reflection: %s", class_loader()->klass()->internal_name());
 394       }
 395       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::ReflectionMetaspaceType));
 396     } else {
 397       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::StandardMetaspaceType));
 398     }
 399   }
 400   return _metaspace;
 401 }
 402 
 403 JNIHandleBlock* ClassLoaderData::handles() const           { return _handles; }
 404 void ClassLoaderData::set_handles(JNIHandleBlock* handles) { _handles = handles; }
 405 
 406 jobject ClassLoaderData::add_handle(Handle h) {
 407   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 408   if (handles() == NULL) {
 409     set_handles(JNIHandleBlock::allocate_block());
 410   }
 411   return handles()->allocate_handle(h());
 412 }
 413 
 414 // Add this metadata pointer to be freed when it's safe.  This is only during
 415 // class unloading because Handles might point to this metadata field.
 416 void ClassLoaderData::add_to_deallocate_list(Metadata* m) {
 417   // Metadata in shared region isn't deleted.
 418   if (!m->is_shared()) {
 419     MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 420     if (_deallocate_list == NULL) {
 421       _deallocate_list = new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(100, true);
 422     }
 423     _deallocate_list->append_if_missing(m);
 424   }
 425 }
 426 
 427 // Deallocate free metadata on the free list.  How useful the PermGen was!
 428 void ClassLoaderData::free_deallocate_list() {
 429   // Don't need lock, at safepoint
 430   assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
 431   if (_deallocate_list == NULL) {
 432     return;
 433   }
 434   // Go backwards because this removes entries that are freed.
 435   for (int i = _deallocate_list->length() - 1; i >= 0; i--) {
 436     Metadata* m = _deallocate_list->at(i);
 437     if (!m->on_stack()) {
 438       _deallocate_list->remove_at(i);
 439       // There are only three types of metadata that we deallocate directly.
 440       // Cast them so they can be used by the template function.
 441       if (m->is_method()) {
 442         MetadataFactory::free_metadata(this, (Method*)m);
 443       } else if (m->is_constantPool()) {
 444         MetadataFactory::free_metadata(this, (ConstantPool*)m);
 445       } else if (m->is_klass()) {
 446         MetadataFactory::free_metadata(this, (InstanceKlass*)m);
 447       } else {
 448         ShouldNotReachHere();
 449       }
 450     }
 451   }
 452 }
 453 
 454 // These anonymous class loaders are to contain classes used for JSR292
 455 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) {
 456   // Add a new class loader data to the graph.
 457   return ClassLoaderDataGraph::add(loader, true, CHECK_NULL);
 458 }
 459 
 460 const char* ClassLoaderData::loader_name() {
 461   // Handles null class loader
 462   return SystemDictionary::loader_name(class_loader());
 463 }
 464 
 465 #ifndef PRODUCT
 466 // Define to dump klasses
 467 #undef CLD_DUMP_KLASSES
 468 
 469 void ClassLoaderData::dump(outputStream * const out) {
 470   ResourceMark rm;
 471   out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {",
 472       this, (void *)class_loader(),
 473       class_loader() != NULL ? class_loader()->klass() : NULL, loader_name());
 474   if (claimed()) out->print(" claimed ");
 475   if (is_unloading()) out->print(" unloading ");
 476   out->print(" handles " INTPTR_FORMAT, handles());
 477   out->cr();
 478   if (metaspace_or_null() != NULL) {
 479     out->print_cr("metaspace: " PTR_FORMAT, metaspace_or_null());
 480     metaspace_or_null()->dump(out);
 481   } else {
 482     out->print_cr("metaspace: NULL");
 483   }
 484 
 485 #ifdef CLD_DUMP_KLASSES
 486   if (Verbose) {
 487     ResourceMark rm;
 488     Klass* k = _klasses;
 489     while (k != NULL) {
 490       out->print_cr("klass "PTR_FORMAT", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(),
 491           k->has_modified_oops(), k->has_accumulated_modified_oops());
 492       assert(k != k->next_link(), "no loops!");
 493       k = k->next_link();
 494     }
 495   }
 496 #endif  // CLD_DUMP_KLASSES
 497 #undef CLD_DUMP_KLASSES
 498   if (_jmethod_ids != NULL) {
 499     Method::print_jmethod_ids(this, out);
 500   }
 501   out->print_cr("}");
 502 }
 503 #endif // PRODUCT
 504 
 505 void ClassLoaderData::verify() {
 506   oop cl = class_loader();
 507 
 508   guarantee(this == class_loader_data(cl) || is_anonymous(), "Must be the same");
 509   guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data() || is_anonymous(), "must be");
 510 
 511   // Verify the integrity of the allocated space.
 512   if (metaspace_or_null() != NULL) {
 513     metaspace_or_null()->verify();
 514   }
 515 
 516   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 517     guarantee(k->class_loader_data() == this, "Must be the same");
 518     k->verify();
 519     assert(k != k->next_link(), "no loops!");
 520   }
 521 }
 522 
 523 
 524 // GC root of class loader data created.
 525 ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
 526 ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
 527 ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
 528 
 529 // Add a new class loader data node to the list.  Assign the newly created
 530 // ClassLoaderData into the java/lang/ClassLoader object as a hidden field
 531 ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_anonymous, TRAPS) {
 532   // We need to allocate all the oops for the ClassLoaderData before allocating the
 533   // actual ClassLoaderData object.
 534   ClassLoaderData::Dependencies dependencies(CHECK_NULL);
 535 
 536   No_Safepoint_Verifier no_safepoints; // we mustn't GC until we've installed the
 537                                        // ClassLoaderData in the graph since the CLD
 538                                        // contains unhandled oops
 539 
 540   ClassLoaderData* cld = new ClassLoaderData(loader, is_anonymous, dependencies);
 541 
 542 
 543   if (!is_anonymous) {
 544     ClassLoaderData** cld_addr = java_lang_ClassLoader::loader_data_addr(loader());
 545     // First, Atomically set it
 546     ClassLoaderData* old = (ClassLoaderData*) Atomic::cmpxchg_ptr(cld, cld_addr, NULL);
 547     if (old != NULL) {
 548       delete cld;
 549       // Returns the data.
 550       return old;
 551     }
 552   }
 553 
 554   // We won the race, and therefore the task of adding the data to the list of
 555   // class loader data
 556   ClassLoaderData** list_head = &_head;
 557   ClassLoaderData* next = _head;
 558 
 559   do {
 560     cld->set_next(next);
 561     ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next);
 562     if (exchanged == next) {
 563       if (TraceClassLoaderData) {
 564         ResourceMark rm;
 565         tty->print("[ClassLoaderData: ");
 566         tty->print("create class loader data "PTR_FORMAT, cld);
 567         tty->print(" for instance "PTR_FORMAT" of %s", (void *)cld->class_loader(),
 568                    cld->loader_name());
 569         tty->print_cr("]");
 570       }
 571       return cld;
 572     }
 573     next = exchanged;
 574   } while (true);
 575 
 576 }
 577 
 578 void ClassLoaderDataGraph::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 579   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 580     cld->oops_do(f, klass_closure, must_claim);
 581   }
 582 }
 583 
 584 void ClassLoaderDataGraph::keep_alive_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 585   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 586     if (cld->keep_alive()) {
 587       cld->oops_do(f, klass_closure, must_claim);
 588     }
 589   }
 590 }
 591 
 592 void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 593   if (ClassUnloading) {
 594     ClassLoaderData::the_null_class_loader_data()->oops_do(f, klass_closure, must_claim);
 595     // keep any special CLDs alive.
 596     ClassLoaderDataGraph::keep_alive_oops_do(f, klass_closure, must_claim);
 597   } else {
 598     ClassLoaderDataGraph::oops_do(f, klass_closure, must_claim);
 599   }
 600 }
 601 
 602 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
 603   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 604     cld->classes_do(klass_closure);
 605   }
 606 }
 607 
 608 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
 609   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 610     cld->classes_do(f);
 611   }
 612 }
 613 
 614 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
 615   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 616     cld->loaded_classes_do(klass_closure);
 617   }
 618 }
 619 
 620 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
 621   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
 622   for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
 623     cld->classes_do(f);
 624   }
 625 }
 626 
 627 GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
 628   assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
 629 
 630   GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();
 631 
 632   // The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true);
 633   ClassLoaderData* curr = _head;
 634   while (curr != _saved_head) {
 635     if (!curr->claimed()) {
 636       array->push(curr);
 637 
 638       if (TraceClassLoaderData) {
 639         tty->print("[ClassLoaderData] found new CLD: ");
 640         curr->print_value_on(tty);
 641         tty->cr();
 642       }
 643     }
 644 
 645     curr = curr->_next;
 646   }
 647 
 648   return array;
 649 }
 650 
 651 #ifndef PRODUCT
 652 // for debugging and hsfind(x)
 653 bool ClassLoaderDataGraph::contains(address x) {
 654   // I think we need the _metaspace_lock taken here because the class loader
 655   // data graph could be changing while we are walking it (new entries added,
 656   // new entries being unloaded, etc).
 657   if (DumpSharedSpaces) {
 658     // There are only two metaspaces to worry about.
 659     ClassLoaderData* ncld = ClassLoaderData::the_null_class_loader_data();
 660     return (ncld->ro_metaspace()->contains(x) || ncld->rw_metaspace()->contains(x));
 661   }
 662 
 663   if (UseSharedSpaces && MetaspaceShared::is_in_shared_space(x)) {
 664     return true;
 665   }
 666 
 667   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 668     if (cld->metaspace_or_null() != NULL && cld->metaspace_or_null()->contains(x)) {
 669       return true;
 670     }
 671   }
 672 
 673   // Could also be on an unloading list which is okay, ie. still allocated
 674   // for a little while.
 675   for (ClassLoaderData* ucld = _unloading; ucld != NULL; ucld = ucld->next()) {
 676     if (ucld->metaspace_or_null() != NULL && ucld->metaspace_or_null()->contains(x)) {
 677       return true;
 678     }
 679   }
 680   return false;
 681 }
 682 
 683 bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
 684   for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
 685     if (loader_data == data) {
 686       return true;
 687     }
 688   }
 689 
 690   return false;
 691 }
 692 #endif // PRODUCT
 693 
 694 
 695 // Move class loader data from main list to the unloaded list for unloading
 696 // and deallocation later.
 697 bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure) {
 698   ClassLoaderData* data = _head;
 699   ClassLoaderData* prev = NULL;
 700   bool seen_dead_loader = false;
 701   // mark metadata seen on the stack and code cache so we can delete
 702   // unneeded entries.
 703   bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
 704   MetadataOnStackMark md_on_stack;
 705   while (data != NULL) {
 706     if (data->keep_alive() || data->is_alive(is_alive_closure)) {
 707       if (has_redefined_a_class) {
 708         data->classes_do(InstanceKlass::purge_previous_versions);
 709       }
 710       data->free_deallocate_list();
 711       prev = data;
 712       data = data->next();
 713       continue;
 714     }
 715     seen_dead_loader = true;
 716     ClassLoaderData* dead = data;
 717     dead->unload();
 718     data = data->next();
 719     // Remove from loader list.
 720     // This class loader data will no longer be found
 721     // in the ClassLoaderDataGraph.
 722     if (prev != NULL) {
 723       prev->set_next(data);
 724     } else {
 725       assert(dead == _head, "sanity check");
 726       _head = data;
 727     }
 728     dead->set_next(_unloading);
 729     _unloading = dead;
 730   }
 731 
 732   if (seen_dead_loader) {
 733     post_class_unload_events();
 734   }
 735 
 736   return seen_dead_loader;
 737 }
 738 
 739 void ClassLoaderDataGraph::purge() {
 740   ClassLoaderData* list = _unloading;
 741   _unloading = NULL;
 742   ClassLoaderData* next = list;
 743   while (next != NULL) {
 744     ClassLoaderData* purge_me = next;
 745     next = purge_me->next();
 746     delete purge_me;
 747   }
 748   Metaspace::purge();
 749 }
 750 
 751 void ClassLoaderDataGraph::post_class_unload_events(void) {
 752 #if INCLUDE_TRACE
 753   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
 754   if (Tracing::enabled()) {
 755     if (Tracing::is_event_enabled(TraceClassUnloadEvent)) {
 756       assert(_unloading != NULL, "need class loader data unload list!");
 757       _class_unload_time = Ticks::now();
 758       classes_unloading_do(&class_unload_event);
 759     }
 760     Tracing::on_unloading_classes();
 761   }
 762 #endif
 763 }
 764 
 765 // CDS support
 766 
 767 // Global metaspaces for writing information to the shared archive.  When
 768 // application CDS is supported, we may need one per metaspace, so this
 769 // sort of looks like it.
 770 Metaspace* ClassLoaderData::_ro_metaspace = NULL;
 771 Metaspace* ClassLoaderData::_rw_metaspace = NULL;
 772 static bool _shared_metaspaces_initialized = false;
 773 
 774 // Initialize shared metaspaces (change to call from somewhere not lazily)
 775 void ClassLoaderData::initialize_shared_metaspaces() {
 776   assert(DumpSharedSpaces, "only use this for dumping shared spaces");
 777   assert(this == ClassLoaderData::the_null_class_loader_data(),
 778          "only supported for null loader data for now");
 779   assert (!_shared_metaspaces_initialized, "only initialize once");
 780   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 781   _ro_metaspace = new Metaspace(_metaspace_lock, Metaspace::ROMetaspaceType);
 782   _rw_metaspace = new Metaspace(_metaspace_lock, Metaspace::ReadWriteMetaspaceType);
 783   _shared_metaspaces_initialized = true;
 784 }
 785 
 786 Metaspace* ClassLoaderData::ro_metaspace() {
 787   assert(_ro_metaspace != NULL, "should already be initialized");
 788   return _ro_metaspace;
 789 }
 790 
 791 Metaspace* ClassLoaderData::rw_metaspace() {
 792   assert(_rw_metaspace != NULL, "should already be initialized");
 793   return _rw_metaspace;
 794 }
 795 
 796 
 797 ClassLoaderDataGraphMetaspaceIterator::ClassLoaderDataGraphMetaspaceIterator() {
 798   _data = ClassLoaderDataGraph::_head;
 799 }
 800 
 801 ClassLoaderDataGraphMetaspaceIterator::~ClassLoaderDataGraphMetaspaceIterator() {}
 802 
 803 #ifndef PRODUCT
 804 // callable from debugger
 805 extern "C" int print_loader_data_graph() {
 806   ClassLoaderDataGraph::dump_on(tty);
 807   return 0;
 808 }
 809 
 810 void ClassLoaderDataGraph::verify() {
 811   for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
 812     data->verify();
 813   }
 814 }
 815 
 816 void ClassLoaderDataGraph::dump_on(outputStream * const out) {
 817   for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
 818     data->dump(out);
 819   }
 820   MetaspaceAux::dump(out);
 821 }
 822 #endif // PRODUCT
 823 
 824 void ClassLoaderData::print_value_on(outputStream* out) const {
 825   if (class_loader() == NULL) {
 826     out->print("NULL class_loader");
 827   } else {
 828     out->print("class loader "PTR_FORMAT, this);
 829     class_loader()->print_value_on(out);
 830   }
 831 }
 832 
 833 #if INCLUDE_TRACE
 834 
 835 Ticks ClassLoaderDataGraph::_class_unload_time;
 836 
 837 void ClassLoaderDataGraph::class_unload_event(Klass* const k) {
 838 
 839   // post class unload event
 840   EventClassUnload event(UNTIMED);
 841   event.set_endtime(_class_unload_time);
 842   event.set_unloadedClass(k);
 843   oop defining_class_loader = k->class_loader();
 844   event.set_definingClassLoader(defining_class_loader != NULL ?
 845                                 defining_class_loader->klass() : (Klass*)NULL);
 846   event.commit();
 847 }
 848 
 849 #endif /* INCLUDE_TRACE */