hotspot/src/share/vm/memory/universe.hpp
changeset 18066 b4b1f65075e5
parent 18063 3a0a5b11ab14
parent 18025 b7bcf7497f93
child 18492 ab4fbcf75767
equal deleted inserted replaced
18065:7d53ab28f937 18066:b4b1f65075e5
   252   static oop check_mirror(oop m) {
   252   static oop check_mirror(oop m) {
   253     assert(m != NULL, "mirror not initialized");
   253     assert(m != NULL, "mirror not initialized");
   254     return m;
   254     return m;
   255   }
   255   }
   256 
   256 
       
   257   static void     set_narrow_oop_base(address base) {
       
   258     assert(UseCompressedOops, "no compressed oops?");
       
   259     _narrow_oop._base    = base;
       
   260   }
       
   261   static void     set_narrow_klass_base(address base) {
       
   262     assert(UseCompressedKlassPointers, "no compressed klass ptrs?");
       
   263     _narrow_klass._base   = base;
       
   264   }
       
   265   static void     set_narrow_oop_use_implicit_null_checks(bool use) {
       
   266     assert(UseCompressedOops, "no compressed ptrs?");
       
   267     _narrow_oop._use_implicit_null_checks   = use;
       
   268   }
       
   269   static bool     reserve_metaspace_helper(bool with_base = false);
       
   270   static ReservedHeapSpace reserve_heap_metaspace(size_t heap_size, size_t alignment, bool& contiguous);
       
   271 
       
   272   static size_t  class_metaspace_size() {
       
   273     return _class_metaspace_size;
       
   274   }
       
   275   static void    set_class_metaspace_size(size_t metaspace_size) {
       
   276     _class_metaspace_size = metaspace_size;
       
   277   }
       
   278 
       
   279   // Debugging
       
   280   static int _verify_count;                           // number of verifies done
       
   281   // True during call to verify().  Should only be set/cleared in verify().
       
   282   static bool _verify_in_progress;
       
   283 
       
   284   static void compute_verify_oop_data();
       
   285 
       
   286  public:
       
   287   // Known classes in the VM
       
   288   static Klass* boolArrayKlassObj()                 { return _boolArrayKlassObj;   }
       
   289   static Klass* byteArrayKlassObj()                 { return _byteArrayKlassObj;   }
       
   290   static Klass* charArrayKlassObj()                 { return _charArrayKlassObj;   }
       
   291   static Klass* intArrayKlassObj()                  { return _intArrayKlassObj;    }
       
   292   static Klass* shortArrayKlassObj()                { return _shortArrayKlassObj;  }
       
   293   static Klass* longArrayKlassObj()                 { return _longArrayKlassObj;   }
       
   294   static Klass* singleArrayKlassObj()               { return _singleArrayKlassObj; }
       
   295   static Klass* doubleArrayKlassObj()               { return _doubleArrayKlassObj; }
       
   296 
       
   297   static Klass* objectArrayKlassObj() {
       
   298     return _objectArrayKlassObj;
       
   299   }
       
   300 
       
   301   static Klass* typeArrayKlassObj(BasicType t) {
       
   302     assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t)));
       
   303     assert(_typeArrayKlassObjs[t] != NULL, "domain check");
       
   304     return _typeArrayKlassObjs[t];
       
   305   }
       
   306 
       
   307   // Known objects in the VM
       
   308   static oop int_mirror()                   { return check_mirror(_int_mirror); }
       
   309   static oop float_mirror()                 { return check_mirror(_float_mirror); }
       
   310   static oop double_mirror()                { return check_mirror(_double_mirror); }
       
   311   static oop byte_mirror()                  { return check_mirror(_byte_mirror); }
       
   312   static oop bool_mirror()                  { return check_mirror(_bool_mirror); }
       
   313   static oop char_mirror()                  { return check_mirror(_char_mirror); }
       
   314   static oop long_mirror()                  { return check_mirror(_long_mirror); }
       
   315   static oop short_mirror()                 { return check_mirror(_short_mirror); }
       
   316   static oop void_mirror()                  { return check_mirror(_void_mirror); }
       
   317 
       
   318   // table of same
       
   319   static oop _mirrors[T_VOID+1];
       
   320 
       
   321   static oop java_mirror(BasicType t) {
       
   322     assert((uint)t < T_VOID+1, "range check");
       
   323     return check_mirror(_mirrors[t]);
       
   324   }
       
   325   static oop      main_thread_group()                 { return _main_thread_group; }
       
   326   static void set_main_thread_group(oop group)        { _main_thread_group = group;}
       
   327 
       
   328   static oop      system_thread_group()               { return _system_thread_group; }
       
   329   static void set_system_thread_group(oop group)      { _system_thread_group = group;}
       
   330 
       
   331   static objArrayOop  the_empty_class_klass_array ()  { return _the_empty_class_klass_array;   }
       
   332   static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array;   }
       
   333   static oop          the_null_string()               { return _the_null_string;               }
       
   334   static oop          the_min_jint_string()          { return _the_min_jint_string;          }
       
   335   static Method*      finalizer_register_method()     { return _finalizer_register_cache->get_Method(); }
       
   336   static Method*      loader_addClass_method()        { return _loader_addClass_cache->get_Method(); }
       
   337 
       
   338   static Method*      protection_domain_implies_method() { return _pd_implies_cache->get_Method(); }
       
   339   static ActiveMethodOopsCache* reflect_invoke_cache() { return _reflect_invoke_cache; }
       
   340 
       
   341   static oop          null_ptr_exception_instance()   { return _null_ptr_exception_instance;   }
       
   342   static oop          arithmetic_exception_instance() { return _arithmetic_exception_instance; }
       
   343   static oop          virtual_machine_error_instance() { return _virtual_machine_error_instance; }
       
   344   static oop          vm_exception()                  { return _vm_exception; }
       
   345 
       
   346   static Array<int>*       the_empty_int_array()    { return _the_empty_int_array; }
       
   347   static Array<u2>*        the_empty_short_array()  { return _the_empty_short_array; }
       
   348   static Array<Method*>* the_empty_method_array() { return _the_empty_method_array; }
       
   349   static Array<Klass*>*  the_empty_klass_array()  { return _the_empty_klass_array; }
       
   350 
       
   351   // OutOfMemoryError support. Returns an error with the required message. The returned error
       
   352   // may or may not have a backtrace. If error has a backtrace then the stack trace is already
       
   353   // filled in.
       
   354   static oop out_of_memory_error_java_heap()          { return gen_out_of_memory_error(_out_of_memory_error_java_heap);  }
       
   355   static oop out_of_memory_error_perm_gen()           { return gen_out_of_memory_error(_out_of_memory_error_perm_gen);   }
       
   356   static oop out_of_memory_error_array_size()         { return gen_out_of_memory_error(_out_of_memory_error_array_size); }
       
   357   static oop out_of_memory_error_gc_overhead_limit()  { return gen_out_of_memory_error(_out_of_memory_error_gc_overhead_limit);  }
       
   358 
       
   359   // Accessors needed for fast allocation
       
   360   static Klass** boolArrayKlassObj_addr()           { return &_boolArrayKlassObj;   }
       
   361   static Klass** byteArrayKlassObj_addr()           { return &_byteArrayKlassObj;   }
       
   362   static Klass** charArrayKlassObj_addr()           { return &_charArrayKlassObj;   }
       
   363   static Klass** intArrayKlassObj_addr()            { return &_intArrayKlassObj;    }
       
   364   static Klass** shortArrayKlassObj_addr()          { return &_shortArrayKlassObj;  }
       
   365   static Klass** longArrayKlassObj_addr()           { return &_longArrayKlassObj;   }
       
   366   static Klass** singleArrayKlassObj_addr()         { return &_singleArrayKlassObj; }
       
   367   static Klass** doubleArrayKlassObj_addr()         { return &_doubleArrayKlassObj; }
       
   368   static Klass** objectArrayKlassObj_addr()         { return &_objectArrayKlassObj; }
       
   369 
       
   370   // The particular choice of collected heap.
       
   371   static CollectedHeap* heap() { return _collectedHeap; }
       
   372 
       
   373   // For UseCompressedOops
   257   // Narrow Oop encoding mode:
   374   // Narrow Oop encoding mode:
   258   // 0 - Use 32-bits oops without encoding when
   375   // 0 - Use 32-bits oops without encoding when
   259   //     NarrowOopHeapBaseMin + heap_size < 4Gb
   376   //     NarrowOopHeapBaseMin + heap_size < 4Gb
   260   // 1 - Use zero based compressed oops with encoding when
   377   // 1 - Use zero based compressed oops with encoding when
   261   //     NarrowOopHeapBaseMin + heap_size < 32Gb
   378   //     NarrowOopHeapBaseMin + heap_size < 32Gb
   263   enum NARROW_OOP_MODE {
   380   enum NARROW_OOP_MODE {
   264     UnscaledNarrowOop  = 0,
   381     UnscaledNarrowOop  = 0,
   265     ZeroBasedNarrowOop = 1,
   382     ZeroBasedNarrowOop = 1,
   266     HeapBasedNarrowOop = 2
   383     HeapBasedNarrowOop = 2
   267   };
   384   };
       
   385   static NARROW_OOP_MODE narrow_oop_mode();
       
   386   static const char* narrow_oop_mode_to_string(NARROW_OOP_MODE mode);
   268   static char*    preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode);
   387   static char*    preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode);
   269   static char*    preferred_metaspace_base(size_t heap_size, NARROW_OOP_MODE mode);
   388   static char*    preferred_metaspace_base(size_t heap_size, NARROW_OOP_MODE mode);
   270   static void     set_narrow_oop_base(address base) {
       
   271     assert(UseCompressedOops, "no compressed oops?");
       
   272     _narrow_oop._base    = base;
       
   273   }
       
   274   static void     set_narrow_klass_base(address base) {
       
   275     assert(UseCompressedKlassPointers, "no compressed klass ptrs?");
       
   276     _narrow_klass._base   = base;
       
   277   }
       
   278   static void     set_narrow_oop_use_implicit_null_checks(bool use) {
       
   279     assert(UseCompressedOops, "no compressed ptrs?");
       
   280     _narrow_oop._use_implicit_null_checks   = use;
       
   281   }
       
   282   static bool     reserve_metaspace_helper(bool with_base = false);
       
   283   static ReservedHeapSpace reserve_heap_metaspace(size_t heap_size, size_t alignment, bool& contiguous);
       
   284 
       
   285   static size_t  class_metaspace_size() {
       
   286     return _class_metaspace_size;
       
   287   }
       
   288   static void    set_class_metaspace_size(size_t metaspace_size) {
       
   289     _class_metaspace_size = metaspace_size;
       
   290   }
       
   291 
       
   292   // Debugging
       
   293   static int _verify_count;                           // number of verifies done
       
   294   // True during call to verify().  Should only be set/cleared in verify().
       
   295   static bool _verify_in_progress;
       
   296 
       
   297   static void compute_verify_oop_data();
       
   298 
       
   299  public:
       
   300   // Known classes in the VM
       
   301   static Klass* boolArrayKlassObj()                 { return _boolArrayKlassObj;   }
       
   302   static Klass* byteArrayKlassObj()                 { return _byteArrayKlassObj;   }
       
   303   static Klass* charArrayKlassObj()                 { return _charArrayKlassObj;   }
       
   304   static Klass* intArrayKlassObj()                  { return _intArrayKlassObj;    }
       
   305   static Klass* shortArrayKlassObj()                { return _shortArrayKlassObj;  }
       
   306   static Klass* longArrayKlassObj()                 { return _longArrayKlassObj;   }
       
   307   static Klass* singleArrayKlassObj()               { return _singleArrayKlassObj; }
       
   308   static Klass* doubleArrayKlassObj()               { return _doubleArrayKlassObj; }
       
   309 
       
   310   static Klass* objectArrayKlassObj() {
       
   311     return _objectArrayKlassObj;
       
   312   }
       
   313 
       
   314   static Klass* typeArrayKlassObj(BasicType t) {
       
   315     assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t)));
       
   316     assert(_typeArrayKlassObjs[t] != NULL, "domain check");
       
   317     return _typeArrayKlassObjs[t];
       
   318   }
       
   319 
       
   320   // Known objects in the VM
       
   321   static oop int_mirror()                   { return check_mirror(_int_mirror); }
       
   322   static oop float_mirror()                 { return check_mirror(_float_mirror); }
       
   323   static oop double_mirror()                { return check_mirror(_double_mirror); }
       
   324   static oop byte_mirror()                  { return check_mirror(_byte_mirror); }
       
   325   static oop bool_mirror()                  { return check_mirror(_bool_mirror); }
       
   326   static oop char_mirror()                  { return check_mirror(_char_mirror); }
       
   327   static oop long_mirror()                  { return check_mirror(_long_mirror); }
       
   328   static oop short_mirror()                 { return check_mirror(_short_mirror); }
       
   329   static oop void_mirror()                  { return check_mirror(_void_mirror); }
       
   330 
       
   331   // table of same
       
   332   static oop _mirrors[T_VOID+1];
       
   333 
       
   334   static oop java_mirror(BasicType t) {
       
   335     assert((uint)t < T_VOID+1, "range check");
       
   336     return check_mirror(_mirrors[t]);
       
   337   }
       
   338   static oop      main_thread_group()                 { return _main_thread_group; }
       
   339   static void set_main_thread_group(oop group)        { _main_thread_group = group;}
       
   340 
       
   341   static oop      system_thread_group()               { return _system_thread_group; }
       
   342   static void set_system_thread_group(oop group)      { _system_thread_group = group;}
       
   343 
       
   344   static objArrayOop  the_empty_class_klass_array ()  { return _the_empty_class_klass_array;   }
       
   345   static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array;   }
       
   346   static oop          the_null_string()               { return _the_null_string;               }
       
   347   static oop          the_min_jint_string()          { return _the_min_jint_string;          }
       
   348   static Method*      finalizer_register_method()     { return _finalizer_register_cache->get_Method(); }
       
   349   static Method*      loader_addClass_method()        { return _loader_addClass_cache->get_Method(); }
       
   350 
       
   351   static Method*      protection_domain_implies_method() { return _pd_implies_cache->get_Method(); }
       
   352   static ActiveMethodOopsCache* reflect_invoke_cache() { return _reflect_invoke_cache; }
       
   353 
       
   354   static oop          null_ptr_exception_instance()   { return _null_ptr_exception_instance;   }
       
   355   static oop          arithmetic_exception_instance() { return _arithmetic_exception_instance; }
       
   356   static oop          virtual_machine_error_instance() { return _virtual_machine_error_instance; }
       
   357   static oop          vm_exception()                  { return _vm_exception; }
       
   358 
       
   359   static Array<int>*       the_empty_int_array()    { return _the_empty_int_array; }
       
   360   static Array<u2>*        the_empty_short_array()  { return _the_empty_short_array; }
       
   361   static Array<Method*>* the_empty_method_array() { return _the_empty_method_array; }
       
   362   static Array<Klass*>*  the_empty_klass_array()  { return _the_empty_klass_array; }
       
   363 
       
   364   // OutOfMemoryError support. Returns an error with the required message. The returned error
       
   365   // may or may not have a backtrace. If error has a backtrace then the stack trace is already
       
   366   // filled in.
       
   367   static oop out_of_memory_error_java_heap()          { return gen_out_of_memory_error(_out_of_memory_error_java_heap);  }
       
   368   static oop out_of_memory_error_perm_gen()           { return gen_out_of_memory_error(_out_of_memory_error_perm_gen);   }
       
   369   static oop out_of_memory_error_array_size()         { return gen_out_of_memory_error(_out_of_memory_error_array_size); }
       
   370   static oop out_of_memory_error_gc_overhead_limit()  { return gen_out_of_memory_error(_out_of_memory_error_gc_overhead_limit);  }
       
   371 
       
   372   // Accessors needed for fast allocation
       
   373   static Klass** boolArrayKlassObj_addr()           { return &_boolArrayKlassObj;   }
       
   374   static Klass** byteArrayKlassObj_addr()           { return &_byteArrayKlassObj;   }
       
   375   static Klass** charArrayKlassObj_addr()           { return &_charArrayKlassObj;   }
       
   376   static Klass** intArrayKlassObj_addr()            { return &_intArrayKlassObj;    }
       
   377   static Klass** shortArrayKlassObj_addr()          { return &_shortArrayKlassObj;  }
       
   378   static Klass** longArrayKlassObj_addr()           { return &_longArrayKlassObj;   }
       
   379   static Klass** singleArrayKlassObj_addr()         { return &_singleArrayKlassObj; }
       
   380   static Klass** doubleArrayKlassObj_addr()         { return &_doubleArrayKlassObj; }
       
   381   static Klass** objectArrayKlassObj_addr()         { return &_objectArrayKlassObj; }
       
   382 
       
   383   // The particular choice of collected heap.
       
   384   static CollectedHeap* heap() { return _collectedHeap; }
       
   385 
       
   386   // For UseCompressedOops
       
   387   static address  narrow_oop_base()                       { return  _narrow_oop._base; }
   389   static address  narrow_oop_base()                       { return  _narrow_oop._base; }
   388   static bool  is_narrow_oop_base(void* addr)             { return (narrow_oop_base() == (address)addr); }
   390   static bool  is_narrow_oop_base(void* addr)             { return (narrow_oop_base() == (address)addr); }
   389   static int      narrow_oop_shift()                      { return  _narrow_oop._shift; }
   391   static int      narrow_oop_shift()                      { return  _narrow_oop._shift; }
   390   static bool     narrow_oop_use_implicit_null_checks()   { return  _narrow_oop._use_implicit_null_checks; }
   392   static bool     narrow_oop_use_implicit_null_checks()   { return  _narrow_oop._use_implicit_null_checks; }
   391 
   393