< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page




1184     if (transitive_interfaces()->at(i) == k) {
1185       return true;
1186     }
1187   }
1188   return false;
1189 }
1190 
1191 bool InstanceKlass::is_same_or_direct_interface(Klass *k) const {
1192   // Verify direct super interface
1193   if (this == k) return true;
1194   assert(k->is_interface(), "should be an interface class");
1195   for (int i = 0; i < local_interfaces()->length(); i++) {
1196     if (local_interfaces()->at(i) == k) {
1197       return true;
1198     }
1199   }
1200   return false;
1201 }
1202 
1203 objArrayOop InstanceKlass::allocate_objArray(int n, int length, TRAPS) {
1204   if (length < 0)  {
1205     THROW_MSG_0(vmSymbols::java_lang_NegativeArraySizeException(), err_msg("%d", length));
1206   }
1207   if (length > arrayOopDesc::max_array_length(T_OBJECT)) {
1208     report_java_out_of_memory("Requested array size exceeds VM limit");
1209     JvmtiExport::post_array_size_exhausted();
1210     THROW_OOP_0(Universe::out_of_memory_error_array_size());
1211   }
1212   int size = objArrayOopDesc::object_size(length);
1213   Klass* ak = array_klass(n, CHECK_NULL);
1214   objArrayOop o = (objArrayOop)Universe::heap()->array_allocate(ak, size, length,
1215                                                                 /* do_zero */ true, CHECK_NULL);
1216   return o;
1217 }
1218 
1219 instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) {
1220   if (TraceFinalizerRegistration) {
1221     tty->print("Registered ");
1222     i->print_value_on(tty);
1223     tty->print_cr(" (" INTPTR_FORMAT ") as finalizable", p2i(i));
1224   }
1225   instanceHandle h_i(THREAD, i);
1226   // Pass the handle as argument, JavaCalls::call expects oop as jobjects
1227   JavaValue result(T_VOID);
1228   JavaCallArguments args(h_i);
1229   methodHandle mh (THREAD, Universe::finalizer_register_method());
1230   JavaCalls::call(&result, mh, &args, CHECK_NULL);
1231   return h_i();




1184     if (transitive_interfaces()->at(i) == k) {
1185       return true;
1186     }
1187   }
1188   return false;
1189 }
1190 
1191 bool InstanceKlass::is_same_or_direct_interface(Klass *k) const {
1192   // Verify direct super interface
1193   if (this == k) return true;
1194   assert(k->is_interface(), "should be an interface class");
1195   for (int i = 0; i < local_interfaces()->length(); i++) {
1196     if (local_interfaces()->at(i) == k) {
1197       return true;
1198     }
1199   }
1200   return false;
1201 }
1202 
1203 objArrayOop InstanceKlass::allocate_objArray(int n, int length, TRAPS) {
1204   check_array_allocation_length(length, arrayOopDesc::max_array_length(T_OBJECT), CHECK_NULL);







1205   int size = objArrayOopDesc::object_size(length);
1206   Klass* ak = array_klass(n, CHECK_NULL);
1207   objArrayOop o = (objArrayOop)Universe::heap()->array_allocate(ak, size, length,
1208                                                                 /* do_zero */ true, CHECK_NULL);
1209   return o;
1210 }
1211 
1212 instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) {
1213   if (TraceFinalizerRegistration) {
1214     tty->print("Registered ");
1215     i->print_value_on(tty);
1216     tty->print_cr(" (" INTPTR_FORMAT ") as finalizable", p2i(i));
1217   }
1218   instanceHandle h_i(THREAD, i);
1219   // Pass the handle as argument, JavaCalls::call expects oop as jobjects
1220   JavaValue result(T_VOID);
1221   JavaCallArguments args(h_i);
1222   methodHandle mh (THREAD, Universe::finalizer_register_method());
1223   JavaCalls::call(&result, mh, &args, CHECK_NULL);
1224   return h_i();


< prev index next >