< prev index next >

src/hotspot/share/oops/objArrayOop.hpp

Print this page

40   friend class Runtime1;
41   friend class psPromotionManager;
42   friend class CSetMarkWordClosure;
43   friend class Continuation;
44   template <typename T>
45   friend class RawOopWriter;
46 
47   template <class T> T* obj_at_addr(int index) const;
48 
49   template <class T>
50   static ptrdiff_t obj_at_offset(int index) {
51     return base_offset_in_bytes() + sizeof(T) * index;
52   }
53 
54  public:
55   // Returns the offset of the first element.
56   static int base_offset_in_bytes() {
57     return arrayOopDesc::base_offset_in_bytes(T_OBJECT);
58   }
59 


60   // base is the address following the header.
61   HeapWord* base() const;
62 
63   // Accessing
64   oop obj_at(int index) const;

65 
66   void obj_at_put(int index, oop value);
67 
68   oop replace_if_null(int index, oop exchange_value);
69 
70   // Sizing
71   size_t object_size()        { return object_size(length()); }
72 
73   static size_t object_size(int length) {
74     // This returns the object size in HeapWords.
75     size_t asz = (size_t)length * heapOopSize;
76     size_t size_words = heap_word_size(base_offset_in_bytes() + asz);
77     size_t osz = align_object_size(size_words);
78     assert(osz < max_jint, "no overflow");
79     return osz;
80   }
81 
82   Klass* element_klass();
83 
84 public:
85   // special iterators for index ranges, returns size of object
86   template <typename OopClosureType>
87   void oop_iterate_range(OopClosureType* blk, int start, int end);
88 };
89 
90 // See similar requirement for oopDesc.
91 static_assert(std::is_trivially_default_constructible<objArrayOopDesc>::value, "required");
92 
93 #endif // SHARE_OOPS_OBJARRAYOOP_HPP

40   friend class Runtime1;
41   friend class psPromotionManager;
42   friend class CSetMarkWordClosure;
43   friend class Continuation;
44   template <typename T>
45   friend class RawOopWriter;
46 
47   template <class T> T* obj_at_addr(int index) const;
48 
49   template <class T>
50   static ptrdiff_t obj_at_offset(int index) {
51     return base_offset_in_bytes() + sizeof(T) * index;
52   }
53 
54  public:
55   // Returns the offset of the first element.
56   static int base_offset_in_bytes() {
57     return arrayOopDesc::base_offset_in_bytes(T_OBJECT);
58   }
59 
60   inline static objArrayOop cast(oop o);
61 
62   // base is the address following the header.
63   HeapWord* base() const;
64 
65   // Accessing
66   oop obj_at(int index) const;
67   oop obj_at(int index, TRAPS) const;
68 
69   void obj_at_put(int index, oop value);
70   void obj_at_put(int index, oop value, TRAPS);













71 
72   Klass* element_klass();
73 
74 public:
75   // special iterators for index ranges, returns size of object
76   template <typename OopClosureType>
77   void oop_iterate_range(OopClosureType* blk, int start, int end);
78 };
79 
80 // See similar requirement for oopDesc.
81 static_assert(std::is_trivially_default_constructible<objArrayOopDesc>::value, "required");
82 
83 #endif // SHARE_OOPS_OBJARRAYOOP_HPP
< prev index next >