classLoaderData.cpp revision 11857:d0fbf661cc16
1/*
2 * Copyright (c) 2012, 2016, 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// platform, 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/moduleEntry.hpp"
55#include "classfile/packageEntry.hpp"
56#include "classfile/systemDictionary.hpp"
57#include "code/codeCache.hpp"
58#include "gc/shared/gcLocker.hpp"
59#include "logging/log.hpp"
60#include "memory/metadataFactory.hpp"
61#include "memory/metaspaceShared.hpp"
62#include "memory/oopFactory.hpp"
63#include "memory/resourceArea.hpp"
64#include "oops/objArrayOop.inline.hpp"
65#include "oops/oop.inline.hpp"
66#include "runtime/atomic.hpp"
67#include "runtime/javaCalls.hpp"
68#include "runtime/jniHandles.hpp"
69#include "runtime/mutex.hpp"
70#include "runtime/orderAccess.hpp"
71#include "runtime/safepoint.hpp"
72#include "runtime/synchronizer.hpp"
73#include "utilities/growableArray.hpp"
74#include "utilities/macros.hpp"
75#include "utilities/ostream.hpp"
76#if INCLUDE_TRACE
77#include "trace/tracing.hpp"
78#endif
79
80// helper function to avoid in-line casts
81template <typename T> static T* load_ptr_acquire(T* volatile *p) {
82  return static_cast<T*>(OrderAccess::load_ptr_acquire(p));
83}
84
85ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL;
86
87ClassLoaderData::ClassLoaderData(Handle h_class_loader, bool is_anonymous, Dependencies dependencies) :
88  _class_loader(h_class_loader()),
89  _is_anonymous(is_anonymous),
90  // An anonymous class loader data doesn't have anything to keep
91  // it from being unloaded during parsing of the anonymous class.
92  // The null-class-loader should always be kept alive.
93  _keep_alive((is_anonymous || h_class_loader.is_null()) ? 1 : 0),
94  _metaspace(NULL), _unloading(false), _klasses(NULL),
95  _modules(NULL), _packages(NULL),
96  _claimed(0), _jmethod_ids(NULL), _handles(NULL), _deallocate_list(NULL),
97  _next(NULL), _dependencies(dependencies), _shared_class_loader_id(-1),
98  _metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true,
99                            Monitor::_safepoint_check_never)) {
100    // empty
101}
102
103void ClassLoaderData::init_dependencies(TRAPS) {
104  assert(!Universe::is_fully_initialized(), "should only be called when initializing");
105  assert(is_the_null_class_loader_data(), "should only call this for the null class loader");
106  _dependencies.init(CHECK);
107}
108
109void ClassLoaderData::Dependencies::init(TRAPS) {
110  // Create empty dependencies array to add to. CMS requires this to be
111  // an oop so that it can track additions via card marks.  We think.
112  _list_head = oopFactory::new_objectArray(2, CHECK);
113}
114
115bool ClassLoaderData::claim() {
116  if (_claimed == 1) {
117    return false;
118  }
119
120  return (int) Atomic::cmpxchg(1, &_claimed, 0) == 0;
121}
122
123// Anonymous classes have their own ClassLoaderData that is marked to keep alive
124// while the class is being parsed, and if the class appears on the module fixup list.
125// Due to the uniqueness that no other class shares the anonymous class' name or
126// ClassLoaderData, no other non-GC thread has knowledge of the anonymous class while
127// it is being defined, therefore _keep_alive is not volatile or atomic.
128void ClassLoaderData::inc_keep_alive() {
129  if (is_anonymous()) {
130    assert(_keep_alive >= 0, "Invalid keep alive increment count");
131    _keep_alive++;
132  }
133}
134
135void ClassLoaderData::dec_keep_alive() {
136  if (is_anonymous()) {
137    assert(_keep_alive > 0, "Invalid keep alive decrement count");
138    _keep_alive--;
139  }
140}
141
142void ClassLoaderData::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
143  if (must_claim && !claim()) {
144    return;
145  }
146
147  f->do_oop(&_class_loader);
148  _dependencies.oops_do(f);
149  if (_handles != NULL) {
150    _handles->oops_do(f);
151  }
152  if (klass_closure != NULL) {
153    classes_do(klass_closure);
154  }
155}
156
157void ClassLoaderData::Dependencies::oops_do(OopClosure* f) {
158  f->do_oop((oop*)&_list_head);
159}
160
161void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
162  // Lock-free access requires load_ptr_acquire
163  for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
164    klass_closure->do_klass(k);
165    assert(k != k->next_link(), "no loops!");
166  }
167}
168
169void ClassLoaderData::classes_do(void f(Klass * const)) {
170  assert_locked_or_safepoint(_metaspace_lock);
171  for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
172    f(k);
173  }
174}
175
176void ClassLoaderData::methods_do(void f(Method*)) {
177  // Lock-free access requires load_ptr_acquire
178  for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
179    if (k->is_instance_klass()) {
180      InstanceKlass::cast(k)->methods_do(f);
181    }
182  }
183}
184
185void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
186  // Lock to avoid classes being modified/added/removed during iteration
187  MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
188  for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
189    // Do not filter ArrayKlass oops here...
190    if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) {
191      klass_closure->do_klass(k);
192    }
193  }
194}
195
196void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
197  // Lock-free access requires load_ptr_acquire
198  for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
199    if (k->is_instance_klass()) {
200      f(InstanceKlass::cast(k));
201    }
202    assert(k != k->next_link(), "no loops!");
203  }
204}
205
206void ClassLoaderData::modules_do(void f(ModuleEntry*)) {
207  assert_locked_or_safepoint(Module_lock);
208  if (_modules != NULL) {
209    for (int i = 0; i < _modules->table_size(); i++) {
210      for (ModuleEntry* entry = _modules->bucket(i);
211                              entry != NULL;
212                              entry = entry->next()) {
213        f(entry);
214      }
215    }
216  }
217}
218
219void ClassLoaderData::packages_do(void f(PackageEntry*)) {
220  // Lock-free access requires load_ptr_acquire
221  PackageEntryTable* packages = load_ptr_acquire(&_packages);
222  if (packages != NULL) {
223    for (int i = 0; i < packages->table_size(); i++) {
224      for (PackageEntry* entry = packages->bucket(i);
225                              entry != NULL;
226                              entry = entry->next()) {
227        f(entry);
228      }
229    }
230  }
231}
232
233void ClassLoaderData::record_dependency(const Klass* k, TRAPS) {
234  assert(k != NULL, "invariant");
235
236  ClassLoaderData * const from_cld = this;
237  ClassLoaderData * const to_cld = k->class_loader_data();
238
239  // Dependency to the null class loader data doesn't need to be recorded
240  // because the null class loader data never goes away.
241  if (to_cld->is_the_null_class_loader_data()) {
242    return;
243  }
244
245  oop to;
246  if (to_cld->is_anonymous()) {
247    // Anonymous class dependencies are through the mirror.
248    to = k->java_mirror();
249  } else {
250    to = to_cld->class_loader();
251
252    // If from_cld is anonymous, even if it's class_loader is a parent of 'to'
253    // we still have to add it.  The class_loader won't keep from_cld alive.
254    if (!from_cld->is_anonymous()) {
255      // Check that this dependency isn't from the same or parent class_loader
256      oop from = from_cld->class_loader();
257
258      oop curr = from;
259      while (curr != NULL) {
260        if (curr == to) {
261          return; // this class loader is in the parent list, no need to add it.
262        }
263        curr = java_lang_ClassLoader::parent(curr);
264      }
265    }
266  }
267
268  // It's a dependency we won't find through GC, add it. This is relatively rare
269  // Must handle over GC point.
270  Handle dependency(THREAD, to);
271  from_cld->_dependencies.add(dependency, CHECK);
272}
273
274
275void ClassLoaderData::Dependencies::add(Handle dependency, TRAPS) {
276  // Check first if this dependency is already in the list.
277  // Save a pointer to the last to add to under the lock.
278  objArrayOop ok = _list_head;
279  objArrayOop last = NULL;
280  while (ok != NULL) {
281    last = ok;
282    if (ok->obj_at(0) == dependency()) {
283      // Don't need to add it
284      return;
285    }
286    ok = (objArrayOop)ok->obj_at(1);
287  }
288
289  // Must handle over GC points
290  assert (last != NULL, "dependencies should be initialized");
291  objArrayHandle last_handle(THREAD, last);
292
293  // Create a new dependency node with fields for (class_loader or mirror, next)
294  objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
295  deps->obj_at_put(0, dependency());
296
297  // Must handle over GC points
298  objArrayHandle new_dependency(THREAD, deps);
299
300  // Add the dependency under lock
301  locked_add(last_handle, new_dependency, THREAD);
302}
303
304void ClassLoaderData::Dependencies::locked_add(objArrayHandle last_handle,
305                                               objArrayHandle new_dependency,
306                                               Thread* THREAD) {
307
308  // Have to lock and put the new dependency on the end of the dependency
309  // array so the card mark for CMS sees that this dependency is new.
310  // Can probably do this lock free with some effort.
311  ObjectLocker ol(Handle(THREAD, _list_head), THREAD);
312
313  oop loader_or_mirror = new_dependency->obj_at(0);
314
315  // Since the dependencies are only added, add to the end.
316  objArrayOop end = last_handle();
317  objArrayOop last = NULL;
318  while (end != NULL) {
319    last = end;
320    // check again if another thread added it to the end.
321    if (end->obj_at(0) == loader_or_mirror) {
322      // Don't need to add it
323      return;
324    }
325    end = (objArrayOop)end->obj_at(1);
326  }
327  assert (last != NULL, "dependencies should be initialized");
328  // fill in the first element with the oop in new_dependency.
329  if (last->obj_at(0) == NULL) {
330    last->obj_at_put(0, new_dependency->obj_at(0));
331  } else {
332    last->obj_at_put(1, new_dependency());
333  }
334}
335
336void ClassLoaderDataGraph::clear_claimed_marks() {
337  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
338    cld->clear_claimed();
339  }
340}
341
342void ClassLoaderData::add_class(Klass* k, bool publicize /* true */) {
343  {
344    MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
345    Klass* old_value = _klasses;
346    k->set_next_link(old_value);
347    // Link the new item into the list, making sure the linked class is stable
348    // since the list can be walked without a lock
349    OrderAccess::release_store_ptr(&_klasses, k);
350  }
351
352  if (publicize && k->class_loader_data() != NULL) {
353    ResourceMark rm;
354    log_trace(class, loader, data)("Adding k: " PTR_FORMAT " %s to CLD: "
355                  PTR_FORMAT " loader: " PTR_FORMAT " %s",
356                  p2i(k),
357                  k->external_name(),
358                  p2i(k->class_loader_data()),
359                  p2i((void *)k->class_loader()),
360                  loader_name());
361  }
362}
363
364// Remove a klass from the _klasses list for scratch_class during redefinition
365// or parsed class in the case of an error.
366void ClassLoaderData::remove_class(Klass* scratch_class) {
367  assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
368  Klass* prev = NULL;
369  for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
370    if (k == scratch_class) {
371      if (prev == NULL) {
372        _klasses = k->next_link();
373      } else {
374        Klass* next = k->next_link();
375        prev->set_next_link(next);
376      }
377      return;
378    }
379    prev = k;
380    assert(k != k->next_link(), "no loops!");
381  }
382  ShouldNotReachHere();   // should have found this class!!
383}
384
385void ClassLoaderData::unload() {
386  _unloading = true;
387
388  // Tell serviceability tools these classes are unloading
389  classes_do(InstanceKlass::notify_unload_class);
390
391  if (log_is_enabled(Debug, class, loader, data)) {
392    ResourceMark rm;
393    outputStream* log = Log(class, loader, data)::debug_stream();
394    log->print(": unload loader data " INTPTR_FORMAT, p2i(this));
395    log->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)class_loader()),
396               loader_name());
397    if (is_anonymous()) {
398      log->print(" for anonymous class  " INTPTR_FORMAT " ", p2i(_klasses));
399    }
400    log->cr();
401  }
402
403  // In some rare cases items added to this list will not be freed elsewhere.
404  // To keep it simple, just free everything in it here.
405  free_deallocate_list();
406}
407
408PackageEntryTable* ClassLoaderData::packages() {
409  // Lazily create the package entry table at first request.
410  // Lock-free access requires load_ptr_acquire.
411  PackageEntryTable* packages = load_ptr_acquire(&_packages);
412  if (packages == NULL) {
413    MutexLockerEx m1(metaspace_lock(), Mutex::_no_safepoint_check_flag);
414    // Check if _packages got allocated while we were waiting for this lock.
415    if ((packages = _packages) == NULL) {
416      packages = new PackageEntryTable(PackageEntryTable::_packagetable_entry_size);
417      // Ensure _packages is stable, since it is examined without a lock
418      OrderAccess::release_store_ptr(&_packages, packages);
419    }
420  }
421  return packages;
422}
423
424ModuleEntryTable* ClassLoaderData::modules() {
425  // Lazily create the module entry table at first request.
426  // Lock-free access requires load_ptr_acquire.
427  ModuleEntryTable* modules = load_ptr_acquire(&_modules);
428  if (modules == NULL) {
429    MutexLocker m1(Module_lock);
430    // Check if _modules got allocated while we were waiting for this lock.
431    if ((modules = _modules) == NULL) {
432      modules = new ModuleEntryTable(ModuleEntryTable::_moduletable_entry_size);
433      // Each loader has one unnamed module entry. Create it before
434      // any classes, loaded by this loader, are defined in case
435      // they end up being defined in loader's unnamed module.
436      modules->create_unnamed_module(this);
437
438      {
439        MutexLockerEx m1(metaspace_lock(), Mutex::_no_safepoint_check_flag);
440        // Ensure _modules is stable, since it is examined without a lock
441        OrderAccess::release_store_ptr(&_modules, modules);
442      }
443    }
444  }
445  return modules;
446}
447
448oop ClassLoaderData::keep_alive_object() const {
449  assert_locked_or_safepoint(_metaspace_lock);
450  assert(!keep_alive(), "Don't use with CLDs that are artificially kept alive");
451  return is_anonymous() ? _klasses->java_mirror() : class_loader();
452}
453
454bool ClassLoaderData::is_alive(BoolObjectClosure* is_alive_closure) const {
455  bool alive = keep_alive() // null class loader and incomplete anonymous klasses.
456      || is_alive_closure->do_object_b(keep_alive_object());
457
458  return alive;
459}
460
461
462ClassLoaderData::~ClassLoaderData() {
463  // Release C heap structures for all the classes.
464  classes_do(InstanceKlass::release_C_heap_structures);
465
466  // Release C heap allocated hashtable for all the packages.
467  if (_packages != NULL) {
468    // Destroy the table itself
469    delete _packages;
470    _packages = NULL;
471  }
472
473  // Release C heap allocated hashtable for all the modules.
474  if (_modules != NULL) {
475    // Destroy the table itself
476    delete _modules;
477    _modules = NULL;
478  }
479
480  // release the metaspace
481  Metaspace *m = _metaspace;
482  if (m != NULL) {
483    _metaspace = NULL;
484    delete m;
485  }
486  // release the handles
487  if (_handles != NULL) {
488    JNIHandleBlock::release_block(_handles);
489    _handles = NULL;
490  }
491
492  // Clear all the JNI handles for methods
493  // These aren't deallocated and are going to look like a leak, but that's
494  // needed because we can't really get rid of jmethodIDs because we don't
495  // know when native code is going to stop using them.  The spec says that
496  // they're "invalid" but existing programs likely rely on their being
497  // NULL after class unloading.
498  if (_jmethod_ids != NULL) {
499    Method::clear_jmethod_ids(this);
500  }
501  // Delete lock
502  delete _metaspace_lock;
503
504  // Delete free list
505  if (_deallocate_list != NULL) {
506    delete _deallocate_list;
507  }
508}
509
510// Returns true if this class loader data is for the system class loader.
511bool ClassLoaderData::is_system_class_loader_data() const {
512  return SystemDictionary::is_system_class_loader(class_loader());
513}
514
515// Returns true if this class loader data is for the platform class loader.
516bool ClassLoaderData::is_platform_class_loader_data() const {
517  return SystemDictionary::is_platform_class_loader(class_loader());
518}
519
520// Returns true if this class loader data is one of the 3 builtin
521// (boot, application/system or platform) class loaders. Note, the
522// builtin loaders are not freed by a GC.
523bool ClassLoaderData::is_builtin_class_loader_data() const {
524  Handle classLoaderHandle = class_loader();
525  return (is_the_null_class_loader_data() ||
526          SystemDictionary::is_system_class_loader(classLoaderHandle) ||
527          SystemDictionary::is_platform_class_loader(classLoaderHandle));
528}
529
530Metaspace* ClassLoaderData::metaspace_non_null() {
531  assert(!DumpSharedSpaces, "wrong metaspace!");
532  // If the metaspace has not been allocated, create a new one.  Might want
533  // to create smaller arena for Reflection class loaders also.
534  // The reason for the delayed allocation is because some class loaders are
535  // simply for delegating with no metadata of their own.
536  // Lock-free access requires load_ptr_acquire.
537  Metaspace* metaspace = load_ptr_acquire(&_metaspace);
538  if (metaspace == NULL) {
539    MutexLockerEx ml(_metaspace_lock,  Mutex::_no_safepoint_check_flag);
540    // Check if _metaspace got allocated while we were waiting for this lock.
541    if ((metaspace = _metaspace) == NULL) {
542      if (this == the_null_class_loader_data()) {
543        assert (class_loader() == NULL, "Must be");
544        metaspace = new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType);
545      } else if (is_anonymous()) {
546        if (class_loader() != NULL) {
547          log_trace(class, loader, data)("is_anonymous: %s", class_loader()->klass()->internal_name());
548        }
549        metaspace = new Metaspace(_metaspace_lock, Metaspace::AnonymousMetaspaceType);
550      } else if (class_loader()->is_a(SystemDictionary::reflect_DelegatingClassLoader_klass())) {
551        if (class_loader() != NULL) {
552          log_trace(class, loader, data)("is_reflection: %s", class_loader()->klass()->internal_name());
553        }
554        metaspace = new Metaspace(_metaspace_lock, Metaspace::ReflectionMetaspaceType);
555      } else {
556        metaspace = new Metaspace(_metaspace_lock, Metaspace::StandardMetaspaceType);
557      }
558      // Ensure _metaspace is stable, since it is examined without a lock
559      OrderAccess::release_store_ptr(&_metaspace, metaspace);
560    }
561  }
562  return metaspace;
563}
564
565JNIHandleBlock* ClassLoaderData::handles() const           { return _handles; }
566void ClassLoaderData::set_handles(JNIHandleBlock* handles) { _handles = handles; }
567
568jobject ClassLoaderData::add_handle(Handle h) {
569  MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
570  if (handles() == NULL) {
571    set_handles(JNIHandleBlock::allocate_block());
572  }
573  return handles()->allocate_handle(h());
574}
575
576void ClassLoaderData::remove_handle(jobject h) {
577  _handles->release_handle(h);
578}
579
580// Add this metadata pointer to be freed when it's safe.  This is only during
581// class unloading because Handles might point to this metadata field.
582void ClassLoaderData::add_to_deallocate_list(Metadata* m) {
583  // Metadata in shared region isn't deleted.
584  if (!m->is_shared()) {
585    MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
586    if (_deallocate_list == NULL) {
587      _deallocate_list = new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(100, true);
588    }
589    _deallocate_list->append_if_missing(m);
590  }
591}
592
593// Deallocate free metadata on the free list.  How useful the PermGen was!
594void ClassLoaderData::free_deallocate_list() {
595  // Don't need lock, at safepoint
596  assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
597  if (_deallocate_list == NULL) {
598    return;
599  }
600  // Go backwards because this removes entries that are freed.
601  for (int i = _deallocate_list->length() - 1; i >= 0; i--) {
602    Metadata* m = _deallocate_list->at(i);
603    if (!m->on_stack()) {
604      _deallocate_list->remove_at(i);
605      // There are only three types of metadata that we deallocate directly.
606      // Cast them so they can be used by the template function.
607      if (m->is_method()) {
608        MetadataFactory::free_metadata(this, (Method*)m);
609      } else if (m->is_constantPool()) {
610        MetadataFactory::free_metadata(this, (ConstantPool*)m);
611      } else if (m->is_klass()) {
612        MetadataFactory::free_metadata(this, (InstanceKlass*)m);
613      } else {
614        ShouldNotReachHere();
615      }
616    } else {
617      // Metadata is alive.
618      // If scratch_class is on stack then it shouldn't be on this list!
619      assert(!m->is_klass() || !((InstanceKlass*)m)->is_scratch_class(),
620             "scratch classes on this list should be dead");
621      // Also should assert that other metadata on the list was found in handles.
622    }
623  }
624}
625
626// These anonymous class loaders are to contain classes used for JSR292
627ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) {
628  // Add a new class loader data to the graph.
629  return ClassLoaderDataGraph::add(loader, true, THREAD);
630}
631
632const char* ClassLoaderData::loader_name() {
633  // Handles null class loader
634  return SystemDictionary::loader_name(class_loader());
635}
636
637#ifndef PRODUCT
638// Define to dump klasses
639#undef CLD_DUMP_KLASSES
640
641void ClassLoaderData::dump(outputStream * const out) {
642  ResourceMark rm;
643  out->print("ClassLoaderData CLD: " PTR_FORMAT ", loader: " PTR_FORMAT ", loader_klass: " PTR_FORMAT " %s {",
644      p2i(this), p2i((void *)class_loader()),
645      p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name());
646  if (claimed()) out->print(" claimed ");
647  if (is_unloading()) out->print(" unloading ");
648  out->print(" handles " INTPTR_FORMAT, p2i(handles()));
649  out->cr();
650  if (metaspace_or_null() != NULL) {
651    out->print_cr("metaspace: " INTPTR_FORMAT, p2i(metaspace_or_null()));
652    metaspace_or_null()->dump(out);
653  } else {
654    out->print_cr("metaspace: NULL");
655  }
656
657#ifdef CLD_DUMP_KLASSES
658  if (Verbose) {
659    ResourceMark rm;
660    Klass* k = _klasses;
661    while (k != NULL) {
662      out->print_cr("klass " PTR_FORMAT ", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(),
663          k->has_modified_oops(), k->has_accumulated_modified_oops());
664      assert(k != k->next_link(), "no loops!");
665      k = k->next_link();
666    }
667  }
668#endif  // CLD_DUMP_KLASSES
669#undef CLD_DUMP_KLASSES
670  if (_jmethod_ids != NULL) {
671    Method::print_jmethod_ids(this, out);
672  }
673  out->print_cr("}");
674}
675#endif // PRODUCT
676
677void ClassLoaderData::verify() {
678  assert_locked_or_safepoint(_metaspace_lock);
679  oop cl = class_loader();
680
681  guarantee(this == class_loader_data(cl) || is_anonymous(), "Must be the same");
682  guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data() || is_anonymous(), "must be");
683
684  // Verify the integrity of the allocated space.
685  if (metaspace_or_null() != NULL) {
686    metaspace_or_null()->verify();
687  }
688
689  for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
690    guarantee(k->class_loader_data() == this, "Must be the same");
691    k->verify();
692    assert(k != k->next_link(), "no loops!");
693  }
694}
695
696bool ClassLoaderData::contains_klass(Klass* klass) {
697  // Lock-free access requires load_ptr_acquire
698  for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
699    if (k == klass) return true;
700  }
701  return false;
702}
703
704
705// GC root of class loader data created.
706ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
707ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
708ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL;
709ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
710
711bool ClassLoaderDataGraph::_should_purge = false;
712bool ClassLoaderDataGraph::_metaspace_oom = false;
713
714// Add a new class loader data node to the list.  Assign the newly created
715// ClassLoaderData into the java/lang/ClassLoader object as a hidden field
716ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_anonymous, TRAPS) {
717  // We need to allocate all the oops for the ClassLoaderData before allocating the
718  // actual ClassLoaderData object.
719  ClassLoaderData::Dependencies dependencies(CHECK_NULL);
720
721  NoSafepointVerifier no_safepoints; // we mustn't GC until we've installed the
722                                     // ClassLoaderData in the graph since the CLD
723                                     // contains unhandled oops
724
725  ClassLoaderData* cld = new ClassLoaderData(loader, is_anonymous, dependencies);
726
727
728  if (!is_anonymous) {
729    ClassLoaderData** cld_addr = java_lang_ClassLoader::loader_data_addr(loader());
730    // First, Atomically set it
731    ClassLoaderData* old = (ClassLoaderData*) Atomic::cmpxchg_ptr(cld, cld_addr, NULL);
732    if (old != NULL) {
733      delete cld;
734      // Returns the data.
735      return old;
736    }
737  }
738
739  // We won the race, and therefore the task of adding the data to the list of
740  // class loader data
741  ClassLoaderData** list_head = &_head;
742  ClassLoaderData* next = _head;
743
744  do {
745    cld->set_next(next);
746    ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next);
747    if (exchanged == next) {
748      if (log_is_enabled(Debug, class, loader, data)) {
749       PauseNoSafepointVerifier pnsv(&no_safepoints); // Need safe points for JavaCalls::call_virtual
750       log_creation(loader, cld, CHECK_NULL);
751      }
752      return cld;
753    }
754    next = exchanged;
755  } while (true);
756}
757
758void ClassLoaderDataGraph::log_creation(Handle loader, ClassLoaderData* cld, TRAPS) {
759  Handle string;
760  if (loader.not_null()) {
761    // Include the result of loader.toString() in the output. This allows
762    // the user of the log to identify the class loader instance.
763    JavaValue result(T_OBJECT);
764    KlassHandle spec_klass(THREAD, SystemDictionary::ClassLoader_klass());
765    JavaCalls::call_virtual(&result,
766                            loader,
767                            spec_klass,
768                            vmSymbols::toString_name(),
769                            vmSymbols::void_string_signature(),
770                            CHECK);
771    assert(result.get_type() == T_OBJECT, "just checking");
772    string = (oop)result.get_jobject();
773  }
774
775  ResourceMark rm;
776  outputStream* log = Log(class, loader, data)::debug_stream();
777  log->print("create class loader data " INTPTR_FORMAT, p2i(cld));
778  log->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)cld->class_loader()),
779             cld->loader_name());
780
781  if (string.not_null()) {
782    log->print(": ");
783    java_lang_String::print(string(), log);
784  }
785  log->cr();
786}
787
788
789void ClassLoaderDataGraph::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
790  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
791    cld->oops_do(f, klass_closure, must_claim);
792  }
793}
794
795void ClassLoaderDataGraph::keep_alive_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
796  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
797    if (cld->keep_alive()) {
798      cld->oops_do(f, klass_closure, must_claim);
799    }
800  }
801}
802
803void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
804  if (ClassUnloading) {
805    keep_alive_oops_do(f, klass_closure, must_claim);
806  } else {
807    oops_do(f, klass_closure, must_claim);
808  }
809}
810
811void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
812  for (ClassLoaderData* cld = _head; cl != NULL && cld != NULL; cld = cld->next()) {
813    cl->do_cld(cld);
814  }
815}
816
817void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
818  for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
819    CLDClosure* closure = cld->keep_alive() ? strong : weak;
820    if (closure != NULL) {
821      closure->do_cld(cld);
822    }
823  }
824}
825
826void ClassLoaderDataGraph::keep_alive_cld_do(CLDClosure* cl) {
827  roots_cld_do(cl, NULL);
828}
829
830void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
831  if (ClassUnloading) {
832    keep_alive_cld_do(cl);
833  } else {
834    cld_do(cl);
835  }
836}
837
838void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
839  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
840    cld->classes_do(klass_closure);
841  }
842}
843
844void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
845  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
846    cld->classes_do(f);
847  }
848}
849
850void ClassLoaderDataGraph::methods_do(void f(Method*)) {
851  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
852    cld->methods_do(f);
853  }
854}
855
856void ClassLoaderDataGraph::modules_do(void f(ModuleEntry*)) {
857  assert_locked_or_safepoint(Module_lock);
858  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
859    cld->modules_do(f);
860  }
861}
862
863void ClassLoaderDataGraph::modules_unloading_do(void f(ModuleEntry*)) {
864  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
865  // Only walk the head until any clds not purged from prior unloading
866  // (CMS doesn't purge right away).
867  for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
868    assert(cld->is_unloading(), "invariant");
869    cld->modules_do(f);
870  }
871}
872
873void ClassLoaderDataGraph::packages_do(void f(PackageEntry*)) {
874  assert_locked_or_safepoint(Module_lock);
875  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
876    cld->packages_do(f);
877  }
878}
879
880void ClassLoaderDataGraph::packages_unloading_do(void f(PackageEntry*)) {
881  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
882  // Only walk the head until any clds not purged from prior unloading
883  // (CMS doesn't purge right away).
884  for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
885    assert(cld->is_unloading(), "invariant");
886    cld->packages_do(f);
887  }
888}
889
890void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
891  for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
892    cld->loaded_classes_do(klass_closure);
893  }
894}
895
896void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
897  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
898  // Only walk the head until any clds not purged from prior unloading
899  // (CMS doesn't purge right away).
900  for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
901    assert(cld->is_unloading(), "invariant");
902    cld->classes_do(f);
903  }
904}
905
906GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
907  assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
908
909  GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();
910
911  // The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true);
912  ClassLoaderData* curr = _head;
913  while (curr != _saved_head) {
914    if (!curr->claimed()) {
915      array->push(curr);
916
917      if (log_is_enabled(Debug, class, loader, data)) {
918        outputStream* log = Log(class, loader, data)::debug_stream();
919        log->print("found new CLD: ");
920        curr->print_value_on(log);
921        log->cr();
922      }
923    }
924
925    curr = curr->_next;
926  }
927
928  return array;
929}
930
931bool ClassLoaderDataGraph::unload_list_contains(const void* x) {
932  assert(SafepointSynchronize::is_at_safepoint(), "only safe to call at safepoint");
933  for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
934    if (cld->metaspace_or_null() != NULL && cld->metaspace_or_null()->contains(x)) {
935      return true;
936    }
937  }
938  return false;
939}
940
941#ifndef PRODUCT
942bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
943  for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
944    if (loader_data == data) {
945      return true;
946    }
947  }
948
949  return false;
950}
951#endif // PRODUCT
952
953
954// Move class loader data from main list to the unloaded list for unloading
955// and deallocation later.
956bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure,
957                                        bool clean_previous_versions) {
958
959  ClassLoaderData* data = _head;
960  ClassLoaderData* prev = NULL;
961  bool seen_dead_loader = false;
962
963  // Mark metadata seen on the stack only so we can delete unneeded entries.
964  // Only walk all metadata, including the expensive code cache walk, for Full GC
965  // and only if class redefinition and if there's previous versions of
966  // Klasses to delete.
967  bool walk_all_metadata = clean_previous_versions &&
968                           JvmtiExport::has_redefined_a_class() &&
969                           InstanceKlass::has_previous_versions();
970  MetadataOnStackMark md_on_stack(walk_all_metadata);
971
972  // Save previous _unloading pointer for CMS which may add to unloading list before
973  // purging and we don't want to rewalk the previously unloaded class loader data.
974  _saved_unloading = _unloading;
975
976  data = _head;
977  while (data != NULL) {
978    if (data->is_alive(is_alive_closure)) {
979      // clean metaspace
980      if (walk_all_metadata) {
981        data->classes_do(InstanceKlass::purge_previous_versions);
982      }
983      data->free_deallocate_list();
984      prev = data;
985      data = data->next();
986      continue;
987    }
988    seen_dead_loader = true;
989    ClassLoaderData* dead = data;
990    dead->unload();
991    data = data->next();
992    // Remove from loader list.
993    // This class loader data will no longer be found
994    // in the ClassLoaderDataGraph.
995    if (prev != NULL) {
996      prev->set_next(data);
997    } else {
998      assert(dead == _head, "sanity check");
999      _head = data;
1000    }
1001    dead->set_next(_unloading);
1002    _unloading = dead;
1003  }
1004
1005  if (seen_dead_loader) {
1006    // Walk a ModuleEntry's reads and a PackageEntry's exports lists
1007    // to determine if there are modules on those lists that are now
1008    // dead and should be removed.  A module's life cycle is equivalent
1009    // to its defining class loader's life cycle.  Since a module is
1010    // considered dead if its class loader is dead, these walks must
1011    // occur after each class loader's aliveness is determined.
1012    data = _head;
1013    while (data != NULL) {
1014      if (data->packages_defined()) {
1015        data->packages()->purge_all_package_exports();
1016      }
1017      if (data->modules_defined()) {
1018        data->modules()->purge_all_module_reads();
1019      }
1020      data = data->next();
1021    }
1022
1023    post_class_unload_events();
1024  }
1025
1026  return seen_dead_loader;
1027}
1028
1029void ClassLoaderDataGraph::purge() {
1030  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
1031  ClassLoaderData* list = _unloading;
1032  _unloading = NULL;
1033  ClassLoaderData* next = list;
1034  bool classes_unloaded = false;
1035  while (next != NULL) {
1036    ClassLoaderData* purge_me = next;
1037    next = purge_me->next();
1038    delete purge_me;
1039    classes_unloaded = true;
1040  }
1041  if (classes_unloaded) {
1042    Metaspace::purge();
1043    set_metaspace_oom(false);
1044  }
1045}
1046
1047void ClassLoaderDataGraph::post_class_unload_events(void) {
1048#if INCLUDE_TRACE
1049  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
1050  if (Tracing::enabled()) {
1051    if (Tracing::is_event_enabled(TraceClassUnloadEvent)) {
1052      assert(_unloading != NULL, "need class loader data unload list!");
1053      _class_unload_time = Ticks::now();
1054      classes_unloading_do(&class_unload_event);
1055    }
1056    Tracing::on_unloading_classes();
1057  }
1058#endif
1059}
1060
1061// CDS support
1062
1063// Global metaspaces for writing information to the shared archive.  When
1064// application CDS is supported, we may need one per metaspace, so this
1065// sort of looks like it.
1066Metaspace* ClassLoaderData::_ro_metaspace = NULL;
1067Metaspace* ClassLoaderData::_rw_metaspace = NULL;
1068static bool _shared_metaspaces_initialized = false;
1069
1070// Initialize shared metaspaces (change to call from somewhere not lazily)
1071void ClassLoaderData::initialize_shared_metaspaces() {
1072  assert(DumpSharedSpaces, "only use this for dumping shared spaces");
1073  assert(this == ClassLoaderData::the_null_class_loader_data(),
1074         "only supported for null loader data for now");
1075  assert (!_shared_metaspaces_initialized, "only initialize once");
1076  MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
1077  _ro_metaspace = new Metaspace(_metaspace_lock, Metaspace::ROMetaspaceType);
1078  _rw_metaspace = new Metaspace(_metaspace_lock, Metaspace::ReadWriteMetaspaceType);
1079  _shared_metaspaces_initialized = true;
1080}
1081
1082Metaspace* ClassLoaderData::ro_metaspace() {
1083  assert(_ro_metaspace != NULL, "should already be initialized");
1084  return _ro_metaspace;
1085}
1086
1087Metaspace* ClassLoaderData::rw_metaspace() {
1088  assert(_rw_metaspace != NULL, "should already be initialized");
1089  return _rw_metaspace;
1090}
1091
1092ClassLoaderDataGraphKlassIteratorAtomic::ClassLoaderDataGraphKlassIteratorAtomic()
1093    : _next_klass(NULL) {
1094  ClassLoaderData* cld = ClassLoaderDataGraph::_head;
1095  Klass* klass = NULL;
1096
1097  // Find the first klass in the CLDG.
1098  while (cld != NULL) {
1099    assert_locked_or_safepoint(cld->metaspace_lock());
1100    klass = cld->_klasses;
1101    if (klass != NULL) {
1102      _next_klass = klass;
1103      return;
1104    }
1105    cld = cld->next();
1106  }
1107}
1108
1109Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass_in_cldg(Klass* klass) {
1110  Klass* next = klass->next_link();
1111  if (next != NULL) {
1112    return next;
1113  }
1114
1115  // No more klasses in the current CLD. Time to find a new CLD.
1116  ClassLoaderData* cld = klass->class_loader_data();
1117  assert_locked_or_safepoint(cld->metaspace_lock());
1118  while (next == NULL) {
1119    cld = cld->next();
1120    if (cld == NULL) {
1121      break;
1122    }
1123    next = cld->_klasses;
1124  }
1125
1126  return next;
1127}
1128
1129Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass() {
1130  Klass* head = _next_klass;
1131
1132  while (head != NULL) {
1133    Klass* next = next_klass_in_cldg(head);
1134
1135    Klass* old_head = (Klass*)Atomic::cmpxchg_ptr(next, &_next_klass, head);
1136
1137    if (old_head == head) {
1138      return head; // Won the CAS.
1139    }
1140
1141    head = old_head;
1142  }
1143
1144  // Nothing more for the iterator to hand out.
1145  assert(head == NULL, "head is " PTR_FORMAT ", expected not null:", p2i(head));
1146  return NULL;
1147}
1148
1149ClassLoaderDataGraphMetaspaceIterator::ClassLoaderDataGraphMetaspaceIterator() {
1150  _data = ClassLoaderDataGraph::_head;
1151}
1152
1153ClassLoaderDataGraphMetaspaceIterator::~ClassLoaderDataGraphMetaspaceIterator() {}
1154
1155#ifndef PRODUCT
1156// callable from debugger
1157extern "C" int print_loader_data_graph() {
1158  ClassLoaderDataGraph::dump_on(tty);
1159  return 0;
1160}
1161
1162void ClassLoaderDataGraph::verify() {
1163  for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
1164    data->verify();
1165  }
1166}
1167
1168void ClassLoaderDataGraph::dump_on(outputStream * const out) {
1169  for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
1170    data->dump(out);
1171  }
1172  MetaspaceAux::dump(out);
1173}
1174#endif // PRODUCT
1175
1176void ClassLoaderData::print_value_on(outputStream* out) const {
1177  if (class_loader() == NULL) {
1178    out->print("NULL class_loader");
1179  } else {
1180    out->print("class loader " INTPTR_FORMAT " ", p2i(this));
1181    class_loader()->print_value_on(out);
1182  }
1183}
1184
1185#if INCLUDE_TRACE
1186
1187Ticks ClassLoaderDataGraph::_class_unload_time;
1188
1189void ClassLoaderDataGraph::class_unload_event(Klass* const k) {
1190  assert(k != NULL, "invariant");
1191
1192  // post class unload event
1193  EventClassUnload event(UNTIMED);
1194  event.set_endtime(_class_unload_time);
1195  event.set_unloadedClass(k);
1196  oop defining_class_loader = k->class_loader();
1197  event.set_definingClassLoader(defining_class_loader != NULL ?
1198                                defining_class_loader->klass() : (Klass*)NULL);
1199  event.commit();
1200}
1201
1202#endif // INCLUDE_TRACE
1203