hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 15437 eabd4555d072
parent 15216 73d9d2eb205d
child 15484 7395ace8a11a
equal deleted inserted replaced
15431:570c5062ab8a 15437:eabd4555d072
     1 /*
     1 /*
     2  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    32 #include "gc_interface/collectedHeap.inline.hpp"
    32 #include "gc_interface/collectedHeap.inline.hpp"
    33 #include "interpreter/oopMapCache.hpp"
    33 #include "interpreter/oopMapCache.hpp"
    34 #include "interpreter/rewriter.hpp"
    34 #include "interpreter/rewriter.hpp"
    35 #include "jvmtifiles/jvmti.h"
    35 #include "jvmtifiles/jvmti.h"
    36 #include "memory/genOopClosures.inline.hpp"
    36 #include "memory/genOopClosures.inline.hpp"
       
    37 #include "memory/heapInspection.hpp"
    37 #include "memory/metadataFactory.hpp"
    38 #include "memory/metadataFactory.hpp"
    38 #include "memory/oopFactory.hpp"
    39 #include "memory/oopFactory.hpp"
    39 #include "oops/fieldStreams.hpp"
    40 #include "oops/fieldStreams.hpp"
    40 #include "oops/instanceClassLoaderKlass.hpp"
    41 #include "oops/instanceClassLoaderKlass.hpp"
    41 #include "oops/instanceKlass.hpp"
    42 #include "oops/instanceKlass.hpp"
  2958 
  2959 
  2959 const char* InstanceKlass::internal_name() const {
  2960 const char* InstanceKlass::internal_name() const {
  2960   return external_name();
  2961   return external_name();
  2961 }
  2962 }
  2962 
  2963 
       
  2964 #if INCLUDE_SERVICES
       
  2965 // Size Statistics
       
  2966 void InstanceKlass::collect_statistics(KlassSizeStats *sz) const {
       
  2967   Klass::collect_statistics(sz);
       
  2968 
       
  2969   sz->_inst_size  = HeapWordSize * size_helper();
       
  2970   sz->_vtab_bytes = HeapWordSize * align_object_offset(vtable_length());
       
  2971   sz->_itab_bytes = HeapWordSize * align_object_offset(itable_length());
       
  2972   sz->_nonstatic_oopmap_bytes = HeapWordSize *
       
  2973         ((is_interface() || is_anonymous()) ?
       
  2974          align_object_offset(nonstatic_oop_map_size()) :
       
  2975          nonstatic_oop_map_size());
       
  2976 
       
  2977   int n = 0;
       
  2978   n += (sz->_methods_array_bytes         = sz->count_array(methods()));
       
  2979   n += (sz->_method_ordering_bytes       = sz->count_array(method_ordering()));
       
  2980   n += (sz->_local_interfaces_bytes      = sz->count_array(local_interfaces()));
       
  2981   n += (sz->_transitive_interfaces_bytes = sz->count_array(transitive_interfaces()));
       
  2982   n += (sz->_signers_bytes               = sz->count_array(signers()));
       
  2983   n += (sz->_fields_bytes                = sz->count_array(fields()));
       
  2984   n += (sz->_inner_classes_bytes         = sz->count_array(inner_classes()));
       
  2985   sz->_ro_bytes += n;
       
  2986 
       
  2987   const ConstantPool* cp = constants();
       
  2988   if (cp) {
       
  2989     cp->collect_statistics(sz);
       
  2990   }
       
  2991 
       
  2992   const Annotations* anno = annotations();
       
  2993   if (anno) {
       
  2994     anno->collect_statistics(sz);
       
  2995   }
       
  2996 
       
  2997   const Array<Method*>* methods_array = methods();
       
  2998   if (methods()) {
       
  2999     for (int i = 0; i < methods_array->length(); i++) {
       
  3000       Method* method = methods_array->at(i);
       
  3001       if (method) {
       
  3002         sz->_method_count ++;
       
  3003         method->collect_statistics(sz);
       
  3004       }
       
  3005     }
       
  3006   }
       
  3007 }
       
  3008 #endif // INCLUDE_SERVICES
       
  3009 
  2963 // Verification
  3010 // Verification
  2964 
  3011 
  2965 class VerifyFieldClosure: public OopClosure {
  3012 class VerifyFieldClosure: public OopClosure {
  2966  protected:
  3013  protected:
  2967   template <class T> void do_oop_work(T* p) {
  3014   template <class T> void do_oop_work(T* p) {