< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page




4095   // the generated bytecodes for reflection, and if so, "magically"
4096   // delegate to its parent to prevent class loading from occurring
4097   // in places where applications using reflection didn't expect it.
4098   if (is_reflection_class_loader(loader)) {
4099     return parent(loader);
4100   }
4101   return loader;
4102 }
4103 
4104 oop java_lang_ClassLoader::unnamedModule(oop loader) {
4105   assert(is_instance(loader), "loader must be oop");
4106   return loader->obj_field(unnamedModule_offset);
4107 }
4108 
4109 // Caller needs ResourceMark.
4110 const char* java_lang_ClassLoader::describe_external(const oop loader) {
4111   if (loader == NULL) {
4112     return "<bootstrap>";
4113   }
4114 



4115   const char* name = NULL;
4116   oop nameOop = java_lang_ClassLoader::name(loader);
4117   if (nameOop != NULL) {
4118     name = java_lang_String::as_utf8_string(nameOop);
4119   }




4120 
4121   stringStream ss;
4122   const char *seperator;
4123   // If we have a name set for this loader, display it. Otherwise use
4124   // the class of the loader.
4125   if (name != NULL) {
4126     ss.print("\"%s\" (instance of %s", name, loader->klass()->external_name());
4127     seperator = ", ";
4128   } else {
4129     ss.print("instance of %s", loader->klass()->external_name());
4130     seperator = " (";
4131   }
4132 
4133   oop pl = java_lang_ClassLoader::parent(loader);
4134   if (pl != NULL) {
4135     ss.print("%sparent: ", seperator);
4136     oop parentNameOop = java_lang_ClassLoader::name(pl);
4137     if (parentNameOop != NULL) {
4138       const char* parentName = java_lang_String::as_utf8_string(parentNameOop);
4139       if (parentName != NULL) {
4140         ss.print("\"%s\" ", parentName);
4141       }
4142     }
4143     ss.print("%s)", pl->klass()->external_name());
4144   } else {
4145     ss.print("%sparent: <bootstrap>)", seperator);

4146   }


4147   return ss.as_string();
4148 }
4149 
4150 // Support for java_lang_System
4151 //
4152 #define SYSTEM_FIELDS_DO(macro) \
4153   macro(static_in_offset,  k, "in",  input_stream_signature, true); \
4154   macro(static_out_offset, k, "out", print_stream_signature, true); \
4155   macro(static_err_offset, k, "err", print_stream_signature, true); \
4156   macro(static_security_offset, k, "security", security_manager_signature, true)
4157 
4158 void java_lang_System::compute_offsets() {
4159   InstanceKlass* k = SystemDictionary::System_klass();
4160   SYSTEM_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4161 }
4162 
4163 #if INCLUDE_CDS
4164 void java_lang_System::serialize(SerializeClosure* f) {
4165    SYSTEM_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
4166 }




4095   // the generated bytecodes for reflection, and if so, "magically"
4096   // delegate to its parent to prevent class loading from occurring
4097   // in places where applications using reflection didn't expect it.
4098   if (is_reflection_class_loader(loader)) {
4099     return parent(loader);
4100   }
4101   return loader;
4102 }
4103 
4104 oop java_lang_ClassLoader::unnamedModule(oop loader) {
4105   assert(is_instance(loader), "loader must be oop");
4106   return loader->obj_field(unnamedModule_offset);
4107 }
4108 
4109 // Caller needs ResourceMark.
4110 const char* java_lang_ClassLoader::describe_external(const oop loader) {
4111   if (loader == NULL) {
4112     return "<bootstrap>";
4113   }
4114 
4115   bool well_known_loader = SystemDictionary::is_system_class_loader(loader) ||
4116                            SystemDictionary::is_platform_class_loader(loader);
4117 
4118   const char* name = NULL;
4119   oop nameOop = java_lang_ClassLoader::name(loader);
4120   if (nameOop != NULL) {
4121     name = java_lang_String::as_utf8_string(nameOop);
4122   }
4123   if (name == NULL) {
4124     // Use placeholder for missing name to have fixed message format.
4125     name = "<unnamed>";
4126   }
4127 
4128   stringStream ss;




4129   ss.print("\"%s\" (instance of %s", name, loader->klass()->external_name());
4130   if (!well_known_loader) {
4131     const char* parentName = NULL;




4132     oop pl = java_lang_ClassLoader::parent(loader);
4133     if (pl != NULL) {

4134       oop parentNameOop = java_lang_ClassLoader::name(pl);
4135       if (parentNameOop != NULL) {
4136         parentName = java_lang_String::as_utf8_string(parentNameOop);
4137         if (parentName == NULL) {
4138           parentName = "<unnamed>";
4139         }
4140       }
4141       ss.print(", child of \"%s\" %s", parentName, pl->klass()->external_name());
4142     } else {
4143       ss.print(", child of <bootstrap>");
4144     }
4145   }
4146   ss.print(")");
4147  
4148   return ss.as_string();
4149 }
4150 
4151 // Support for java_lang_System
4152 //
4153 #define SYSTEM_FIELDS_DO(macro) \
4154   macro(static_in_offset,  k, "in",  input_stream_signature, true); \
4155   macro(static_out_offset, k, "out", print_stream_signature, true); \
4156   macro(static_err_offset, k, "err", print_stream_signature, true); \
4157   macro(static_security_offset, k, "security", security_manager_signature, true)
4158 
4159 void java_lang_System::compute_offsets() {
4160   InstanceKlass* k = SystemDictionary::System_klass();
4161   SYSTEM_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4162 }
4163 
4164 #if INCLUDE_CDS
4165 void java_lang_System::serialize(SerializeClosure* f) {
4166    SYSTEM_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
4167 }


< prev index next >