< prev index next >

src/share/vm/oops/typeArrayKlass.cpp

Print this page




  55   return element_type() == tak->element_type();
  56 }
  57 
  58 TypeArrayKlass* TypeArrayKlass::create_klass(BasicType type,
  59                                       const char* name_str, TRAPS) {
  60   Symbol* sym = NULL;
  61   if (name_str != NULL) {
  62     sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL);
  63   }
  64 
  65   ClassLoaderData* null_loader_data = ClassLoaderData::the_null_class_loader_data();
  66 
  67   TypeArrayKlass* ak = TypeArrayKlass::allocate(null_loader_data, type, sym, CHECK_NULL);
  68 
  69   // Add all classes to our internal class loader list here,
  70   // including classes in the bootstrap (NULL) class loader.
  71   // GC walks these as strong roots.
  72   null_loader_data->add_class(ak);
  73 
  74   // Call complete_create_array_klass after all instance variables have been initialized.
  75   complete_create_array_klass(ak, ak->super(), ModuleEntryTable::javabase_module(), CHECK_NULL);
  76 
  77   return ak;
  78 }
  79 
  80 TypeArrayKlass* TypeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) {
  81   assert(TypeArrayKlass::header_size() <= InstanceKlass::header_size(),
  82       "array klasses must be same size as InstanceKlass");
  83 
  84   int size = ArrayKlass::static_size(TypeArrayKlass::header_size());
  85 
  86   return new (loader_data, size, THREAD) TypeArrayKlass(type, name);
  87 }
  88 
  89 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) {
  90   set_layout_helper(array_layout_helper(type));
  91   assert(is_array_klass(), "sanity");
  92   assert(is_typeArray_klass(), "sanity");
  93 
  94   set_max_length(arrayOopDesc::max_array_length(type));
  95   assert(size() >= TypeArrayKlass::header_size(), "bad size");


 330     case T_BYTE:    print_byte_array(ta, print_len, st);    break;
 331     case T_SHORT:   print_short_array(ta, print_len, st);   break;
 332     case T_INT:     print_int_array(ta, print_len, st);     break;
 333     case T_LONG:    print_long_array(ta, print_len, st);    break;
 334     default: ShouldNotReachHere();
 335   }
 336   int remaining = ta->length() - print_len;
 337   if (remaining > 0) {
 338     st->print_cr(" - <%d more elements, increase MaxElementPrintSize to print>", remaining);
 339   }
 340 }
 341 
 342 #endif // PRODUCT
 343 
 344 const char* TypeArrayKlass::internal_name() const {
 345   return Klass::external_name();
 346 }
 347 
 348 // A TypeArrayKlass is an array of a primitive type, its defining module is java.base
 349 ModuleEntry* TypeArrayKlass::module() const {
 350   return ModuleEntryTable::javabase_module();
 351 }
 352 
 353 PackageEntry* TypeArrayKlass::package() const {
 354   return NULL;
 355 }


  55   return element_type() == tak->element_type();
  56 }
  57 
  58 TypeArrayKlass* TypeArrayKlass::create_klass(BasicType type,
  59                                       const char* name_str, TRAPS) {
  60   Symbol* sym = NULL;
  61   if (name_str != NULL) {
  62     sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL);
  63   }
  64 
  65   ClassLoaderData* null_loader_data = ClassLoaderData::the_null_class_loader_data();
  66 
  67   TypeArrayKlass* ak = TypeArrayKlass::allocate(null_loader_data, type, sym, CHECK_NULL);
  68 
  69   // Add all classes to our internal class loader list here,
  70   // including classes in the bootstrap (NULL) class loader.
  71   // GC walks these as strong roots.
  72   null_loader_data->add_class(ak);
  73 
  74   // Call complete_create_array_klass after all instance variables have been initialized.
  75   complete_create_array_klass(ak, ak->super(), ModuleEntryTable::javabase_moduleEntry(), CHECK_NULL);
  76 
  77   return ak;
  78 }
  79 
  80 TypeArrayKlass* TypeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) {
  81   assert(TypeArrayKlass::header_size() <= InstanceKlass::header_size(),
  82       "array klasses must be same size as InstanceKlass");
  83 
  84   int size = ArrayKlass::static_size(TypeArrayKlass::header_size());
  85 
  86   return new (loader_data, size, THREAD) TypeArrayKlass(type, name);
  87 }
  88 
  89 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) {
  90   set_layout_helper(array_layout_helper(type));
  91   assert(is_array_klass(), "sanity");
  92   assert(is_typeArray_klass(), "sanity");
  93 
  94   set_max_length(arrayOopDesc::max_array_length(type));
  95   assert(size() >= TypeArrayKlass::header_size(), "bad size");


 330     case T_BYTE:    print_byte_array(ta, print_len, st);    break;
 331     case T_SHORT:   print_short_array(ta, print_len, st);   break;
 332     case T_INT:     print_int_array(ta, print_len, st);     break;
 333     case T_LONG:    print_long_array(ta, print_len, st);    break;
 334     default: ShouldNotReachHere();
 335   }
 336   int remaining = ta->length() - print_len;
 337   if (remaining > 0) {
 338     st->print_cr(" - <%d more elements, increase MaxElementPrintSize to print>", remaining);
 339   }
 340 }
 341 
 342 #endif // PRODUCT
 343 
 344 const char* TypeArrayKlass::internal_name() const {
 345   return Klass::external_name();
 346 }
 347 
 348 // A TypeArrayKlass is an array of a primitive type, its defining module is java.base
 349 ModuleEntry* TypeArrayKlass::module() const {
 350   return ModuleEntryTable::javabase_moduleEntry();
 351 }
 352 
 353 PackageEntry* TypeArrayKlass::package() const {
 354   return NULL;
 355 }
< prev index next >