hotspot/src/share/vm/oops/arrayKlass.cpp
changeset 26412 80741eb33ba2
parent 26135 82b516c550f7
child 26927 b9bd979b7d75
equal deleted inserted replaced
26408:d6defe172e25 26412:80741eb33ba2
    76   set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass());
    76   set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass());
    77   set_layout_helper(Klass::_lh_neutral_value);
    77   set_layout_helper(Klass::_lh_neutral_value);
    78   set_dimension(1);
    78   set_dimension(1);
    79   set_higher_dimension(NULL);
    79   set_higher_dimension(NULL);
    80   set_lower_dimension(NULL);
    80   set_lower_dimension(NULL);
    81   set_component_mirror(NULL);
       
    82   // Arrays don't add any new methods, so their vtable is the same size as
    81   // Arrays don't add any new methods, so their vtable is the same size as
    83   // the vtable of klass Object.
    82   // the vtable of klass Object.
    84   int vtable_size = Universe::base_vtable_size();
    83   int vtable_size = Universe::base_vtable_size();
    85   set_vtable_length(vtable_size);
    84   set_vtable_length(vtable_size);
    86   set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5)
    85   set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5)
   158     f(k);
   157     f(k);
   159     k = ArrayKlass::cast(k)->higher_dimension();
   158     k = ArrayKlass::cast(k)->higher_dimension();
   160   }
   159   }
   161 }
   160 }
   162 
   161 
   163 // GC support
       
   164 
       
   165 void ArrayKlass::oops_do(OopClosure* cl) {
       
   166   Klass::oops_do(cl);
       
   167 
       
   168   cl->do_oop(adr_component_mirror());
       
   169 }
       
   170 
       
   171 // JVM support
   162 // JVM support
   172 
   163 
   173 jint ArrayKlass::compute_modifier_flags(TRAPS) const {
   164 jint ArrayKlass::compute_modifier_flags(TRAPS) const {
   174   return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
   165   return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
   175 }
   166 }
   180   return JVMTI_CLASS_STATUS_ARRAY;
   171   return JVMTI_CLASS_STATUS_ARRAY;
   181 }
   172 }
   182 
   173 
   183 void ArrayKlass::remove_unshareable_info() {
   174 void ArrayKlass::remove_unshareable_info() {
   184   Klass::remove_unshareable_info();
   175   Klass::remove_unshareable_info();
   185   // Clear the java mirror
       
   186   set_component_mirror(NULL);
       
   187 }
   176 }
   188 
   177 
   189 void ArrayKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
   178 void ArrayKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
   190   assert(loader_data == ClassLoaderData::the_null_class_loader_data(), "array classes belong to null loader");
   179   assert(loader_data == ClassLoaderData::the_null_class_loader_data(), "array classes belong to null loader");
   191   Klass::restore_unshareable_info(loader_data, protection_domain, CHECK);
   180   Klass::restore_unshareable_info(loader_data, protection_domain, CHECK);
   215 
   204 
   216 // Verification
   205 // Verification
   217 
   206 
   218 void ArrayKlass::verify_on(outputStream* st) {
   207 void ArrayKlass::verify_on(outputStream* st) {
   219   Klass::verify_on(st);
   208   Klass::verify_on(st);
   220 
       
   221   if (component_mirror() != NULL) {
       
   222     guarantee(component_mirror()->klass() != NULL, "should have a class");
       
   223   }
       
   224 }
   209 }
   225 
   210 
   226 void ArrayKlass::oop_verify_on(oop obj, outputStream* st) {
   211 void ArrayKlass::oop_verify_on(oop obj, outputStream* st) {
   227   guarantee(obj->is_array(), "must be array");
   212   guarantee(obj->is_array(), "must be array");
   228   arrayOop a = arrayOop(obj);
   213   arrayOop a = arrayOop(obj);