--- a/hotspot/src/share/vm/classfile/classLoaderData.hpp Fri Jun 07 09:33:01 2013 -0700
+++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp Mon Jun 10 11:30:51 2013 +0200
@@ -32,6 +32,10 @@
#include "runtime/mutex.hpp"
#include "utilities/growableArray.hpp"
+#if INCLUDE_TRACE
+# include "trace/traceTime.hpp"
+#endif
+
//
// A class loader represents a linkset. Conceptually, a linkset identifies
// the complete transitive closure of resolved links that a dynamic linker can
@@ -49,6 +53,7 @@
class JNIMethodBlock;
class JNIHandleBlock;
class Metadebug;
+
// GC root for walking class loader data created
class ClassLoaderDataGraph : public AllStatic {
@@ -63,6 +68,7 @@
static ClassLoaderData* _saved_head;
static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS);
+ static void post_class_unload_events(void);
public:
static ClassLoaderData* find_or_create(Handle class_loader, TRAPS);
static void purge();
@@ -71,6 +77,8 @@
static void always_strong_oops_do(OopClosure* blk, KlassClosure* klass_closure, bool must_claim);
static void keep_alive_oops_do(OopClosure* blk, KlassClosure* klass_closure, bool must_claim);
static void classes_do(KlassClosure* klass_closure);
+ static void classes_do(void f(Klass* const));
+ static void classes_unloading_do(void f(Klass* const));
static bool do_unloading(BoolObjectClosure* is_alive);
// CMS support.
@@ -86,6 +94,12 @@
static bool contains(address x);
static bool contains_loader_data(ClassLoaderData* loader_data);
#endif
+
+#if INCLUDE_TRACE
+ private:
+ static TracingTime _class_unload_time;
+ static void class_unload_event(Klass* const k);
+#endif
};
// ClassLoaderData class
@@ -171,7 +185,7 @@
void unload();
bool keep_alive() const { return _keep_alive; }
bool is_alive(BoolObjectClosure* is_alive_closure) const;
-
+ void classes_do(void f(Klass*));
void classes_do(void f(InstanceKlass*));
// Deallocate free list during class unloading.