hotspot/src/share/vm/oops/instanceClassLoaderKlass.cpp
changeset 13738 d67be49a5beb
parent 13728 882756847a04
child 15482 470d0b0c09f1
equal deleted inserted replaced
13737:aa8c9eb6d900 13738:d67be49a5beb
    47   /* Make sure the non-virtual and the virtual versions match. */     \
    47   /* Make sure the non-virtual and the virtual versions match. */     \
    48   assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \
    48   assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \
    49       "Inconsistency in do_metadata");                                \
    49       "Inconsistency in do_metadata");                                \
    50   if (closure->do_metadata##nv_suffix())
    50   if (closure->do_metadata##nv_suffix())
    51 
    51 
    52 // Macro to define instanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for
    52 // Macro to define InstanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for
    53 // all closures.  Macros calling macros above for each oop size.
    53 // all closures.  Macros calling macros above for each oop size.
    54 // Since ClassLoader objects have only a pointer to the loader_data, they are not
    54 // Since ClassLoader objects have only a pointer to the loader_data, they are not
    55 // compressed nor does the pointer move.
    55 // compressed nor does the pointer move.
    56 
    56 
    57 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)\
    57 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)\
    58                                                                                 \
    58                                                                                 \
    59 int instanceClassLoaderKlass::                                                  \
    59 int InstanceClassLoaderKlass::                                                  \
    60 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                  \
    60 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                  \
    61   /* Get size before changing pointers */                                       \
    61   /* Get size before changing pointers */                                       \
    62   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    62   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    63   int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);           \
    63   int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);           \
    64                                                                                 \
    64                                                                                 \
    74 }
    74 }
    75 
    75 
    76 #ifndef SERIALGC
    76 #ifndef SERIALGC
    77 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \
    77 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \
    78                                                                                 \
    78                                                                                 \
    79 int instanceClassLoaderKlass::                                                  \
    79 int InstanceClassLoaderKlass::                                                  \
    80 oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) {        \
    80 oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) {        \
    81   /* Get size before changing pointers */                                       \
    81   /* Get size before changing pointers */                                       \
    82   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    82   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    83   int size = InstanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \
    83   int size = InstanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \
    84   return size;                                                                  \
    84   return size;                                                                  \
    86 #endif // !SERIALGC
    86 #endif // !SERIALGC
    87 
    87 
    88 
    88 
    89 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix)      \
    89 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix)      \
    90                                                                                 \
    90                                                                                 \
    91 int instanceClassLoaderKlass::                                                  \
    91 int InstanceClassLoaderKlass::                                                  \
    92 oop_oop_iterate##nv_suffix##_m(oop obj,                                         \
    92 oop_oop_iterate##nv_suffix##_m(oop obj,                                         \
    93                                OopClosureType* closure,                         \
    93                                OopClosureType* closure,                         \
    94                                MemRegion mr) {                                  \
    94                                MemRegion mr) {                                  \
    95   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    95   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\
    96                                                                                 \
    96                                                                                 \
   116 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN)
   116 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN)
   117 #endif // SERIALGC
   117 #endif // SERIALGC
   118 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m)
   118 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m)
   119 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m)
   119 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m)
   120 
   120 
   121 void instanceClassLoaderKlass::oop_follow_contents(oop obj) {
   121 void InstanceClassLoaderKlass::oop_follow_contents(oop obj) {
   122   InstanceKlass::oop_follow_contents(obj);
   122   InstanceKlass::oop_follow_contents(obj);
   123   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   123   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   124 
   124 
   125   // We must NULL check here, since the class loader
   125   // We must NULL check here, since the class loader
   126   // can be found before the loader data has been set up.
   126   // can be found before the loader data has been set up.
   128     MarkSweep::follow_class_loader(loader_data);
   128     MarkSweep::follow_class_loader(loader_data);
   129   }
   129   }
   130 }
   130 }
   131 
   131 
   132 #ifndef SERIALGC
   132 #ifndef SERIALGC
   133 void instanceClassLoaderKlass::oop_follow_contents(ParCompactionManager* cm,
   133 void InstanceClassLoaderKlass::oop_follow_contents(ParCompactionManager* cm,
   134         oop obj) {
   134         oop obj) {
   135   InstanceKlass::oop_follow_contents(cm, obj);
   135   InstanceKlass::oop_follow_contents(cm, obj);
   136   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   136   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   137   if (loader_data != NULL) {
   137   if (loader_data != NULL) {
   138     PSParallelCompact::follow_class_loader(cm, loader_data);
   138     PSParallelCompact::follow_class_loader(cm, loader_data);
   139   }
   139   }
   140 }
   140 }
   141 
   141 
   142 void instanceClassLoaderKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
   142 void InstanceClassLoaderKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
   143   InstanceKlass::oop_push_contents(pm, obj);
   143   InstanceKlass::oop_push_contents(pm, obj);
   144 
   144 
   145   // This is called by the young collector. It will already have taken care of
   145   // This is called by the young collector. It will already have taken care of
   146   // all class loader data. So, we don't have to follow the class loader ->
   146   // all class loader data. So, we don't have to follow the class loader ->
   147   // class loader data link.
   147   // class loader data link.
   148 }
   148 }
   149 
   149 
   150 int instanceClassLoaderKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
   150 int InstanceClassLoaderKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
   151   InstanceKlass::oop_update_pointers(cm, obj);
   151   InstanceKlass::oop_update_pointers(cm, obj);
   152   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   152   ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj);
   153   if (loader_data != NULL) {
   153   if (loader_data != NULL) {
   154     PSParallelCompact::adjust_class_loader(cm, loader_data);
   154     PSParallelCompact::adjust_class_loader(cm, loader_data);
   155   }
   155   }