< prev index next >
src/share/vm/classfile/classLoaderData.cpp
Print this page
rev 8833 : 8064811: Use THEAD instead of CHECK_NULL in return statements
Summary: Backport from JDK9
Reviewed-by: dholmes, coffeys
rev 8910 : full patch for jfr
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -80,10 +80,11 @@
_metaspace(NULL), _unloading(false), _klasses(NULL),
_claimed(0), _jmethod_ids(NULL), _handles(), _deallocate_list(NULL),
_next(NULL), _dependencies(dependencies),
_metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true)) {
// empty
+ TRACE_INIT_ID(this);
}
void ClassLoaderData::init_dependencies(TRAPS) {
assert(!Universe::is_fully_initialized(), "should only be called when initializing");
assert(is_the_null_class_loader_data(), "should only call this for the null class loader");
@@ -644,10 +645,24 @@
for (ClassLoaderData* cld = _head; cl != NULL && cld != NULL; cld = cld->next()) {
cl->do_cld(cld);
}
}
+void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
+ // this method is only used by jfr now, if you need to use this method in another case,
+ // this check should be removed.
+ assert(EnableJFR && FlightRecorder, "just check");
+
+ assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
+ // Only walk the head until any clds not purged from prior unloading
+ // (CMS doesn't purge right away).
+ for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
+ assert(cld->is_unloading(), "invariant");
+ cl->do_cld(cld);
+ }
+}
+
void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->_next) {
CLDClosure* closure = cld->keep_alive() ? strong : weak;
if (closure != NULL) {
closure->do_cld(cld);
@@ -978,12 +993,10 @@
// post class unload event
EventClassUnload event(UNTIMED);
event.set_endtime(_class_unload_time);
event.set_unloadedClass(k);
- oop defining_class_loader = k->class_loader();
- event.set_definingClassLoader(defining_class_loader != NULL ?
- defining_class_loader->klass() : (Klass*)NULL);
+ event.set_definingClassLoader(k->class_loader_data());
event.commit();
}
#endif // INCLUDE_TRACE
< prev index next >