src/hotspot/share/oops/klass.cpp
changeset 58537 30a9612a657d
parent 58447 319173c62caa
child 58665 30a5049a36bb
child 58679 9c3209ff7550
child 58866 43cfcb1e39c0
equal deleted inserted replaced
58536:1b76d17440a0 58537:30a9612a657d
    55   assert(!m.is_null(), "New mirror should never be null.");
    55   assert(!m.is_null(), "New mirror should never be null.");
    56   assert(_java_mirror.resolve() == NULL, "should only be used to initialize mirror");
    56   assert(_java_mirror.resolve() == NULL, "should only be used to initialize mirror");
    57   _java_mirror = class_loader_data()->add_handle(m);
    57   _java_mirror = class_loader_data()->add_handle(m);
    58 }
    58 }
    59 
    59 
    60 oop Klass::java_mirror() const {
       
    61   return _java_mirror.resolve();
       
    62 }
       
    63 
       
    64 oop Klass::java_mirror_no_keepalive() const {
    60 oop Klass::java_mirror_no_keepalive() const {
    65   return _java_mirror.peek();
    61   return _java_mirror.peek();
    66 }
    62 }
    67 
    63 
    68 bool Klass::is_cloneable() const {
    64 bool Klass::is_cloneable() const {
   679   } else if (length < 0) {
   675   } else if (length < 0) {
   680     THROW_MSG(vmSymbols::java_lang_NegativeArraySizeException(), err_msg("%d", length));
   676     THROW_MSG(vmSymbols::java_lang_NegativeArraySizeException(), err_msg("%d", length));
   681   }
   677   }
   682 }
   678 }
   683 
   679 
   684 oop Klass::class_loader() const { return class_loader_data()->class_loader(); }
       
   685 
       
   686 // In product mode, this function doesn't have virtual function calls so
   680 // In product mode, this function doesn't have virtual function calls so
   687 // there might be some performance advantage to handling InstanceKlass here.
   681 // there might be some performance advantage to handling InstanceKlass here.
   688 const char* Klass::external_name() const {
   682 const char* Klass::external_name() const {
   689   if (is_instance_klass()) {
   683   if (is_instance_klass()) {
   690     const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
   684     const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
   824 
   818 
   825   if (!Symbol::is_valid(k->name())) return false;
   819   if (!Symbol::is_valid(k->name())) return false;
   826   return ClassLoaderDataGraph::is_valid(k->class_loader_data());
   820   return ClassLoaderDataGraph::is_valid(k->class_loader_data());
   827 }
   821 }
   828 
   822 
   829 klassVtable Klass::vtable() const {
       
   830   return klassVtable(const_cast<Klass*>(this), start_of_vtable(), vtable_length() / vtableEntry::size());
       
   831 }
       
   832 
       
   833 vtableEntry* Klass::start_of_vtable() const {
       
   834   return (vtableEntry*) ((address)this + in_bytes(vtable_start_offset()));
       
   835 }
       
   836 
       
   837 Method* Klass::method_at_vtable(int index)  {
   823 Method* Klass::method_at_vtable(int index)  {
   838 #ifndef PRODUCT
   824 #ifndef PRODUCT
   839   assert(index >= 0, "valid vtable index");
   825   assert(index >= 0, "valid vtable index");
   840   if (DebugVtables) {
   826   if (DebugVtables) {
   841     verify_vtable_index(index);
   827     verify_vtable_index(index);
   842   }
   828   }
   843 #endif
   829 #endif
   844   return start_of_vtable()[index].method();
   830   return start_of_vtable()[index].method();
   845 }
   831 }
   846 
   832 
   847 ByteSize Klass::vtable_start_offset() {
       
   848   return in_ByteSize(InstanceKlass::header_size() * wordSize);
       
   849 }
       
   850 
   833 
   851 #ifndef PRODUCT
   834 #ifndef PRODUCT
   852 
   835 
   853 bool Klass::verify_vtable_index(int i) {
   836 bool Klass::verify_vtable_index(int i) {
   854   int limit = vtable_length()/vtableEntry::size();
   837   int limit = vtable_length()/vtableEntry::size();