< prev index next >

src/hotspot/share/oops/klass.cpp

Print this page




 593 
 594 Klass* Klass::array_klass_or_null() {
 595   EXCEPTION_MARK;
 596   // No exception can be thrown by array_klass_impl when called with or_null == true.
 597   // (In anycase, the execption mark will fail if it do so)
 598   return array_klass_impl(true, THREAD);
 599 }
 600 
 601 
 602 Klass* Klass::array_klass_impl(bool or_null, int rank, TRAPS) {
 603   fatal("array_klass should be dispatched to InstanceKlass, ObjArrayKlass or TypeArrayKlass");
 604   return NULL;
 605 }
 606 
 607 
 608 Klass* Klass::array_klass_impl(bool or_null, TRAPS) {
 609   fatal("array_klass should be dispatched to InstanceKlass, ObjArrayKlass or TypeArrayKlass");
 610   return NULL;
 611 }
 612 












 613 oop Klass::class_loader() const { return class_loader_data()->class_loader(); }
 614 
 615 // In product mode, this function doesn't have virtual function calls so
 616 // there might be some performance advantage to handling InstanceKlass here.
 617 const char* Klass::external_name() const {
 618   if (is_instance_klass()) {
 619     const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
 620     if (ik->is_unsafe_anonymous()) {
 621       char addr_buf[20];
 622       jio_snprintf(addr_buf, 20, "/" INTPTR_FORMAT, p2i(ik));
 623       size_t addr_len = strlen(addr_buf);
 624       size_t name_len = name()->utf8_length();
 625       char*  result   = NEW_RESOURCE_ARRAY(char, name_len + addr_len + 1);
 626       name()->as_klass_external_name(result, (int) name_len + 1);
 627       assert(strlen(result) == name_len, "");
 628       strcpy(result + name_len, addr_buf);
 629       assert(strlen(result) == name_len + addr_len, "");
 630       return result;
 631     }
 632   }




 593 
 594 Klass* Klass::array_klass_or_null() {
 595   EXCEPTION_MARK;
 596   // No exception can be thrown by array_klass_impl when called with or_null == true.
 597   // (In anycase, the execption mark will fail if it do so)
 598   return array_klass_impl(true, THREAD);
 599 }
 600 
 601 
 602 Klass* Klass::array_klass_impl(bool or_null, int rank, TRAPS) {
 603   fatal("array_klass should be dispatched to InstanceKlass, ObjArrayKlass or TypeArrayKlass");
 604   return NULL;
 605 }
 606 
 607 
 608 Klass* Klass::array_klass_impl(bool or_null, TRAPS) {
 609   fatal("array_klass should be dispatched to InstanceKlass, ObjArrayKlass or TypeArrayKlass");
 610   return NULL;
 611 }
 612 
 613 void Klass::check_array_allocation_length(int length, int max_length, TRAPS) {
 614   if (length > max_length) {
 615     if (!THREAD->in_retryable_allocation()) {
 616       report_java_out_of_memory("Requested array size exceeds VM limit");
 617       JvmtiExport::post_array_size_exhausted();
 618       THROW_OOP(Universe::out_of_memory_error_array_size());
 619     } else {
 620       THROW_OOP(Universe::out_of_memory_error_retry());
 621     }
 622   }
 623 }
 624 
 625 oop Klass::class_loader() const { return class_loader_data()->class_loader(); }
 626 
 627 // In product mode, this function doesn't have virtual function calls so
 628 // there might be some performance advantage to handling InstanceKlass here.
 629 const char* Klass::external_name() const {
 630   if (is_instance_klass()) {
 631     const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
 632     if (ik->is_unsafe_anonymous()) {
 633       char addr_buf[20];
 634       jio_snprintf(addr_buf, 20, "/" INTPTR_FORMAT, p2i(ik));
 635       size_t addr_len = strlen(addr_buf);
 636       size_t name_len = name()->utf8_length();
 637       char*  result   = NEW_RESOURCE_ARRAY(char, name_len + addr_len + 1);
 638       name()->as_klass_external_name(result, (int) name_len + 1);
 639       assert(strlen(result) == name_len, "");
 640       strcpy(result + name_len, addr_buf);
 641       assert(strlen(result) == name_len + addr_len, "");
 642       return result;
 643     }
 644   }


< prev index next >