< prev index next >

src/hotspot/share/oops/klass.cpp

Print this page




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














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




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


< prev index next >