src/share/vm/oops/instanceClassLoaderKlass.cpp

Print this page




  27 #include "classfile/systemDictionary.hpp"
  28 #include "gc_implementation/shared/markSweep.inline.hpp"
  29 #include "gc_interface/collectedHeap.inline.hpp"
  30 #include "memory/genOopClosures.inline.hpp"
  31 #include "memory/oopFactory.hpp"
  32 #include "oops/instanceKlass.hpp"
  33 #include "oops/instanceClassLoaderKlass.hpp"
  34 #include "oops/instanceMirrorKlass.hpp"
  35 #include "oops/instanceOop.hpp"
  36 #include "oops/oop.inline.hpp"
  37 #include "oops/symbol.hpp"
  38 #include "runtime/handles.inline.hpp"
  39 #include "utilities/macros.hpp"
  40 #if INCLUDE_ALL_GCS
  41 #include "gc_implementation/parNew/parOopClosures.inline.hpp"
  42 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
  43 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
  44 #include "oops/oop.pcgc.inline.hpp"
  45 #endif // INCLUDE_ALL_GCS
  46 
  47 #define if_do_metadata_checked(closure, nv_suffix)                    \
  48   /* Make sure the non-virtual and the virtual versions match. */     \
  49   assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \
  50       "Inconsistency in do_metadata");                                \
  51   if (closure->do_metadata##nv_suffix())
  52 
  53 // Macro to define InstanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for
  54 // all closures.  Macros calling macros above for each oop size.
  55 // Since ClassLoader objects have only a pointer to the loader_data, they are not
  56 // compressed nor does the pointer move.
  57 
  58 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)\
  59                                                                                 \
  60 int InstanceClassLoaderKlass::                                                  \
  61 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                  \
  62   /* Get size before changing pointers */                                       \
  63   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
  64   int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);           \
  65                                                                                 \
  66   if_do_metadata_checked(closure, nv_suffix) {                                  \
  67     ClassLoaderData* cld = java_lang_ClassLoader::loader_data(obj);             \
  68     /* cld can be null if we have a non-registered class loader. */             \
  69     if (cld != NULL) {                                                          \
  70       closure->do_class_loader_data(cld);                                       \
  71     }                                                                           \
  72   }                                                                             \




  27 #include "classfile/systemDictionary.hpp"
  28 #include "gc_implementation/shared/markSweep.inline.hpp"
  29 #include "gc_interface/collectedHeap.inline.hpp"
  30 #include "memory/genOopClosures.inline.hpp"
  31 #include "memory/oopFactory.hpp"
  32 #include "oops/instanceKlass.hpp"
  33 #include "oops/instanceClassLoaderKlass.hpp"
  34 #include "oops/instanceMirrorKlass.hpp"
  35 #include "oops/instanceOop.hpp"
  36 #include "oops/oop.inline.hpp"
  37 #include "oops/symbol.hpp"
  38 #include "runtime/handles.inline.hpp"
  39 #include "utilities/macros.hpp"
  40 #if INCLUDE_ALL_GCS
  41 #include "gc_implementation/parNew/parOopClosures.inline.hpp"
  42 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
  43 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
  44 #include "oops/oop.pcgc.inline.hpp"
  45 #endif // INCLUDE_ALL_GCS
  46 






  47 // Macro to define InstanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for
  48 // all closures.  Macros calling macros above for each oop size.
  49 // Since ClassLoader objects have only a pointer to the loader_data, they are not
  50 // compressed nor does the pointer move.
  51 
  52 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)\
  53                                                                                 \
  54 int InstanceClassLoaderKlass::                                                  \
  55 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                  \
  56   /* Get size before changing pointers */                                       \
  57   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
  58   int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);           \
  59                                                                                 \
  60   if_do_metadata_checked(closure, nv_suffix) {                                  \
  61     ClassLoaderData* cld = java_lang_ClassLoader::loader_data(obj);             \
  62     /* cld can be null if we have a non-registered class loader. */             \
  63     if (cld != NULL) {                                                          \
  64       closure->do_class_loader_data(cld);                                       \
  65     }                                                                           \
  66   }                                                                             \