--- old/src/hotspot/share/classfile/classLoaderData.hpp 2018-06-14 15:06:52.458852890 -0400 +++ new/src/hotspot/share/classfile/classLoaderData.hpp 2018-06-14 15:06:50.567869173 -0400 @@ -37,6 +37,9 @@ #include "jfr/support/jfrTraceIdExtension.hpp" #endif +// external name (synthetic) for the primordial "'bootstrap'" class loader instance +#define BOOTSTRAP_LOADER_NAME "'bootstrap'" +#define BOOTSTRAP_LOADER_NAME_LEN 11 // // A class loader represents a linkset. Conceptually, a linkset identifies @@ -258,9 +261,9 @@ // Support for walking class loader data objects ClassLoaderData* _next; /// Next loader_datas created - // JFR support Klass* _class_loader_klass; - Symbol* _class_loader_name; + Symbol* _name; + Symbol* _name_and_id; JFR_ONLY(DEFINE_TRACE_ID_FIELD;) void set_next(ClassLoaderData* next) { _next = next; } @@ -362,8 +365,6 @@ void initialize_holder(Handle holder); - inline unsigned int identity_hash() const { return (unsigned int)(((intptr_t)this) >> 3); } - void oops_do(OopClosure* f, bool must_claim, bool clear_modified_oops = false); void classes_do(KlassClosure* klass_closure); @@ -377,7 +378,6 @@ void print_value() { print_value_on(tty); } void print_value_on(outputStream* out) const; void verify(); - const char* loader_name() const; OopHandle add_handle(Handle h); void remove_handle(OopHandle h); @@ -400,15 +400,17 @@ static ClassLoaderData* class_loader_data_or_null(oop loader); static ClassLoaderData* anonymous_class_loader_data(Handle loader); - // Returns Klass* of associated class loader, or NULL if associated loader is . + // Returns Klass* of associated class loader, or NULL if associated loader is 'bootstrap'. // Also works if unloading. Klass* class_loader_klass() const { return _class_loader_klass; } - // Returns Name of associated class loader. - // Returns NULL if associated class loader is or if no name has been set for - // this loader. - // Also works if unloading. - Symbol* class_loader_name() const { return _class_loader_name; } + // Obtain the class loader's _name, works during unloading. + const char* loader_name() const; + Symbol* name() const { return _name; } + + // Obtain the class loader's _name_and_id, works during unloading. + const char* loader_name_and_id() const; + Symbol* name_and_id() const { return _name_and_id; } JFR_ONLY(DEFINE_TRACE_ID_METHODS;) };