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 } \ |