hotspot/src/share/vm/oops/objArrayKlass.hpp
changeset 30150 d9c940aa42ef
parent 22794 f1c014ad3754
child 30880 efe35e08179f
equal deleted inserted replaced
30149:c0f930abe5ed 30150:d9c940aa42ef
    24 
    24 
    25 #ifndef SHARE_VM_OOPS_OBJARRAYKLASS_HPP
    25 #ifndef SHARE_VM_OOPS_OBJARRAYKLASS_HPP
    26 #define SHARE_VM_OOPS_OBJARRAYKLASS_HPP
    26 #define SHARE_VM_OOPS_OBJARRAYKLASS_HPP
    27 
    27 
    28 #include "classfile/classLoaderData.hpp"
    28 #include "classfile/classLoaderData.hpp"
    29 #include "memory/specialized_oop_closures.hpp"
       
    30 #include "oops/arrayKlass.hpp"
    29 #include "oops/arrayKlass.hpp"
    31 #include "utilities/macros.hpp"
    30 #include "utilities/macros.hpp"
    32 
    31 
    33 // ObjArrayKlass is the klass for objArrays
    32 // ObjArrayKlass is the klass for objArrays
    34 
    33 
   101   int size() const                        { return ArrayKlass::static_size(header_size()); }
   100   int size() const                        { return ArrayKlass::static_size(header_size()); }
   102 
   101 
   103   // Initialization (virtual from Klass)
   102   // Initialization (virtual from Klass)
   104   void initialize(TRAPS);
   103   void initialize(TRAPS);
   105 
   104 
   106   // Garbage collection
   105   // GC specific object visitors
   107   void oop_follow_contents(oop obj);
   106   //
   108   inline void oop_follow_contents(oop obj, int index);
   107   // Mark Sweep
   109   template <class T> inline void objarray_follow_contents(oop obj, int index);
   108   void oop_ms_follow_contents(oop obj);
   110 
   109   int  oop_ms_adjust_pointers(oop obj);
   111   int  oop_adjust_pointers(oop obj);
       
   112 
       
   113   // Parallel Scavenge and Parallel Old
       
   114   PARALLEL_GC_DECLS
       
   115 #if INCLUDE_ALL_GCS
   110 #if INCLUDE_ALL_GCS
   116   inline void oop_follow_contents(ParCompactionManager* cm, oop obj, int index);
   111   // Parallel Scavenge
   117   template <class T> inline void
   112   void oop_ps_push_contents(  oop obj, PSPromotionManager* pm);
   118     objarray_follow_contents(ParCompactionManager* cm, oop obj, int index);
   113   // Parallel Compact
   119 #endif // INCLUDE_ALL_GCS
   114   void oop_pc_follow_contents(oop obj, ParCompactionManager* cm);
   120 
   115   void oop_pc_update_pointers(oop obj);
   121   // Iterators
   116 #endif
   122   int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) {
   117 
   123     return oop_oop_iterate_v(obj, blk);
   118   // Oop fields (and metadata) iterators
   124   }
   119   //  [nv = true]  Use non-virtual calls to do_oop_nv.
   125   int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) {
   120   //  [nv = false] Use virtual calls to do_oop.
   126     return oop_oop_iterate_v_m(obj, blk, mr);
   121   //
   127   }
   122   // The ObjArrayKlass iterators also visits the Object's klass.
       
   123 
       
   124  private:
       
   125 
       
   126   // Iterate over oop elements and metadata.
       
   127   template <bool nv, typename OopClosureType>
       
   128   inline int oop_oop_iterate(oop obj, OopClosureType* closure);
       
   129 
       
   130   // Iterate over oop elements within mr, and metadata.
       
   131   template <bool nv, typename OopClosureType>
       
   132   inline int oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
       
   133 
       
   134   // Iterate over oop elements with indices within [start, end), and metadata.
       
   135   template <bool nv, class OopClosureType>
       
   136   inline int oop_oop_iterate_range(oop obj, OopClosureType* closure, int start, int end);
       
   137 
       
   138   // Iterate over oop elements within [start, end), and metadata.
       
   139   // Specialized for [T = oop] or [T = narrowOop].
       
   140   template <bool nv, typename T, class OopClosureType>
       
   141   inline void oop_oop_iterate_range_specialized(objArrayOop a, OopClosureType* closure, int start, int end);
       
   142 
       
   143  public:
       
   144   // Iterate over all oop elements.
       
   145   template <bool nv, class OopClosureType>
       
   146   inline void oop_oop_iterate_elements(objArrayOop a, OopClosureType* closure);
       
   147 
       
   148  private:
       
   149   // Iterate over all oop elements.
       
   150   // Specialized for [T = oop] or [T = narrowOop].
       
   151   template <bool nv, typename T, class OopClosureType>
       
   152   inline void oop_oop_iterate_elements_specialized(objArrayOop a, OopClosureType* closure);
       
   153 
       
   154   // Iterate over all oop elements with indices within mr.
       
   155   template <bool nv, class OopClosureType>
       
   156   inline void oop_oop_iterate_elements_bounded(objArrayOop a, OopClosureType* closure, MemRegion mr);
       
   157 
       
   158   // Iterate over oop elements within [low, high)..
       
   159   // Specialized for [T = oop] or [T = narrowOop].
       
   160   template <bool nv, typename T, class OopClosureType>
       
   161   inline void oop_oop_iterate_elements_specialized_bounded(objArrayOop a, OopClosureType* closure, void* low, void* high);
       
   162 
       
   163 
       
   164  public:
       
   165 
   128 #define ObjArrayKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix)   \
   166 #define ObjArrayKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix)   \
   129   int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk);         \
   167   int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk);         \
   130   int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk,      \
   168   int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk,      \
   131                                      MemRegion mr);                     \
   169                                      MemRegion mr);                     \
   132   int oop_oop_iterate_range##nv_suffix(oop obj, OopClosureType* blk,    \
   170   int oop_oop_iterate_range##nv_suffix(oop obj, OopClosureType* blk,    \
   133                                      int start, int end);
   171                                      int start, int end);
   134 
   172 
   135   ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_DECL)
   173   ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_DECL)
   136   ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_DECL)
   174   ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_DECL)
   137 
   175 
       
   176 #if INCLUDE_ALL_GCS
       
   177 #define ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
       
   178   int  oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk);
       
   179 
       
   180   ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
       
   181   ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
       
   182 #endif // INCLUDE_ALL_GCS
       
   183 
   138   // JVM support
   184   // JVM support
   139   jint compute_modifier_flags(TRAPS) const;
   185   jint compute_modifier_flags(TRAPS) const;
   140 
   186 
   141  public:
   187  public:
   142   // Printing
   188   // Printing