src/share/vm/classfile/javaClasses.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 6642881_8u40_hotspot Sdiff src/share/vm/classfile

src/share/vm/classfile/javaClasses.hpp

Print this page
rev 6604 : 6642881: Improve performance of Class.getClassLoader()
Summary: Add classLoader to java/lang/Class instance for fast access
Reviewed-by: alanb, lfoltan, rriggs, vlivanov, twisti, jfranck


 222   macro(java_lang_Class, static_oop_field_count, int_signature,     false) \
 223   macro(java_lang_Class, protection_domain,      object_signature,  false) \
 224   macro(java_lang_Class, init_lock,              object_signature,  false) \
 225   macro(java_lang_Class, signers,                object_signature,  false)
 226 
 227 class java_lang_Class : AllStatic {
 228   friend class VMStructs;
 229 
 230  private:
 231   // The fake offsets are added by the class loader when java.lang.Class is loaded
 232 
 233   static int _klass_offset;
 234   static int _array_klass_offset;
 235 
 236   static int _oop_size_offset;
 237   static int _static_oop_field_count_offset;
 238 
 239   static int _protection_domain_offset;
 240   static int _init_lock_offset;
 241   static int _signers_offset;

 242 
 243   static bool offsets_computed;
 244   static int classRedefinedCount_offset;

 245   static GrowableArray<Klass*>* _fixup_mirror_list;
 246 
 247   static void set_init_lock(oop java_class, oop init_lock);
 248   static void set_protection_domain(oop java_class, oop protection_domain);

 249   static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
 250  public:
 251   static void compute_offsets();
 252 
 253   // Instance creation
 254   static void create_mirror(KlassHandle k, Handle protection_domain, TRAPS);

 255   static void fixup_mirror(KlassHandle k, TRAPS);
 256   static oop  create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
 257   // Conversion
 258   static Klass* as_Klass(oop java_class);
 259   static void set_klass(oop java_class, Klass* klass);
 260   static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL);
 261   static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
 262     Klass* refk_oop = NULL;
 263     BasicType result = as_BasicType(java_class, &refk_oop);
 264     (*reference_klass) = KlassHandle(refk_oop);
 265     return result;
 266   }
 267   static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
 268   static void print_signature(oop java_class, outputStream *st);
 269   // Testing
 270   static bool is_instance(oop obj) {
 271     return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
 272   }
 273   static bool is_primitive(oop java_class);
 274   static BasicType primitive_type(oop java_class);
 275   static oop primitive_mirror(BasicType t);
 276   // JVM_NewArray support
 277   static Klass* array_klass(oop java_class);
 278   static void set_array_klass(oop java_class, Klass* klass);
 279   // compiler support for class operations
 280   static int klass_offset_in_bytes()                { return _klass_offset; }
 281   static int array_klass_offset_in_bytes()          { return _array_klass_offset; }
 282   // Support for classRedefinedCount field
 283   static int classRedefinedCount(oop the_class_mirror);
 284   static void set_classRedefinedCount(oop the_class_mirror, int value);
 285 
 286   // Support for embedded per-class oops
 287   static oop  protection_domain(oop java_class);
 288   static oop  init_lock(oop java_class);
 289   static objArrayOop  signers(oop java_class);
 290   static void set_signers(oop java_class, objArrayOop signers);


 291 
 292   static int oop_size(oop java_class);
 293   static void set_oop_size(oop java_class, int size);
 294   static int static_oop_field_count(oop java_class);
 295   static void set_static_oop_field_count(oop java_class, int size);
 296 
 297   static GrowableArray<Klass*>* fixup_mirror_list() {
 298     return _fixup_mirror_list;
 299   }
 300   static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
 301     _fixup_mirror_list = v;
 302   }
 303   // Debugging
 304   friend class JavaClasses;
 305   friend class InstanceKlass;   // verification code accesses offsets
 306   friend class ClassFileParser; // access to number_of_fake_fields
 307 };
 308 
 309 // Interface to java.lang.Thread objects
 310 




 222   macro(java_lang_Class, static_oop_field_count, int_signature,     false) \
 223   macro(java_lang_Class, protection_domain,      object_signature,  false) \
 224   macro(java_lang_Class, init_lock,              object_signature,  false) \
 225   macro(java_lang_Class, signers,                object_signature,  false)
 226 
 227 class java_lang_Class : AllStatic {
 228   friend class VMStructs;
 229 
 230  private:
 231   // The fake offsets are added by the class loader when java.lang.Class is loaded
 232 
 233   static int _klass_offset;
 234   static int _array_klass_offset;
 235 
 236   static int _oop_size_offset;
 237   static int _static_oop_field_count_offset;
 238 
 239   static int _protection_domain_offset;
 240   static int _init_lock_offset;
 241   static int _signers_offset;
 242   static int _class_loader_offset;
 243 
 244   static bool offsets_computed;
 245   static int classRedefinedCount_offset;
 246 
 247   static GrowableArray<Klass*>* _fixup_mirror_list;
 248 
 249   static void set_init_lock(oop java_class, oop init_lock);
 250   static void set_protection_domain(oop java_class, oop protection_domain);
 251   static void set_class_loader(oop java_class, oop class_loader);
 252   static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
 253  public:
 254   static void compute_offsets();
 255 
 256   // Instance creation
 257   static void create_mirror(KlassHandle k, Handle class_loader,
 258                             Handle protection_domain, TRAPS);
 259   static void fixup_mirror(KlassHandle k, TRAPS);
 260   static oop  create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
 261   // Conversion
 262   static Klass* as_Klass(oop java_class);
 263   static void set_klass(oop java_class, Klass* klass);
 264   static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL);
 265   static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
 266     Klass* refk_oop = NULL;
 267     BasicType result = as_BasicType(java_class, &refk_oop);
 268     (*reference_klass) = KlassHandle(refk_oop);
 269     return result;
 270   }
 271   static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
 272   static void print_signature(oop java_class, outputStream *st);
 273   // Testing
 274   static bool is_instance(oop obj) {
 275     return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
 276   }
 277   static bool is_primitive(oop java_class);
 278   static BasicType primitive_type(oop java_class);
 279   static oop primitive_mirror(BasicType t);
 280   // JVM_NewArray support
 281   static Klass* array_klass(oop java_class);
 282   static void set_array_klass(oop java_class, Klass* klass);
 283   // compiler support for class operations
 284   static int klass_offset_in_bytes()                { return _klass_offset; }
 285   static int array_klass_offset_in_bytes()          { return _array_klass_offset; }
 286   // Support for classRedefinedCount field
 287   static int classRedefinedCount(oop the_class_mirror);
 288   static void set_classRedefinedCount(oop the_class_mirror, int value);
 289 
 290   // Support for embedded per-class oops
 291   static oop  protection_domain(oop java_class);
 292   static oop  init_lock(oop java_class);
 293   static objArrayOop  signers(oop java_class);
 294   static void set_signers(oop java_class, objArrayOop signers);
 295 
 296   static oop class_loader(oop java_class);
 297 
 298   static int oop_size(oop java_class);
 299   static void set_oop_size(oop java_class, int size);
 300   static int static_oop_field_count(oop java_class);
 301   static void set_static_oop_field_count(oop java_class, int size);
 302 
 303   static GrowableArray<Klass*>* fixup_mirror_list() {
 304     return _fixup_mirror_list;
 305   }
 306   static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
 307     _fixup_mirror_list = v;
 308   }
 309   // Debugging
 310   friend class JavaClasses;
 311   friend class InstanceKlass;   // verification code accesses offsets
 312   friend class ClassFileParser; // access to number_of_fake_fields
 313 };
 314 
 315 // Interface to java.lang.Thread objects
 316 


src/share/vm/classfile/javaClasses.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File