< prev index next >

src/hotspot/share/oops/oop.cpp

Print this page

125 bool oopDesc::is_oop(oop obj) {
126   return Universe::heap()->is_oop(obj);
127 }
128 
129 // used only for asserts and guarantees
130 bool oopDesc::is_oop_or_null(oop obj) {
131   return obj == nullptr ? true : is_oop(obj);
132 }
133 
134 VerifyOopClosure VerifyOopClosure::verify_oop;
135 
136 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
137   oop obj = RawAccess<>::oop_load(p);
138   guarantee(oopDesc::is_oop_or_null(obj), "invalid oop: " PTR_FORMAT, p2i(obj));
139 }
140 
141 void VerifyOopClosure::do_oop(oop* p)       { VerifyOopClosure::do_oop_work(p); }
142 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
143 
144 // type test operations that doesn't require inclusion of oop.inline.hpp.
145 bool oopDesc::is_instance_noinline()    const { return is_instance();    }
146 bool oopDesc::is_instanceRef_noinline() const { return is_instanceRef(); }
147 bool oopDesc::is_stackChunk_noinline()  const { return is_stackChunk();  }
148 bool oopDesc::is_array_noinline()       const { return is_array();       }
149 bool oopDesc::is_objArray_noinline()    const { return is_objArray();    }
150 bool oopDesc::is_typeArray_noinline()   const { return is_typeArray();   }


151 
152 #if INCLUDE_CDS_JAVA_HEAP
153 void oopDesc::set_narrow_klass(narrowKlass nk) {
154   assert(CDSConfig::is_dumping_heap(), "Used by CDS only. Do not abuse!");
155   _compressed_klass = nk;
156 }
157 #endif
158 
159 void* oopDesc::load_oop_raw(oop obj, int offset) {
160   uintptr_t addr = (uintptr_t)(void*)obj + (uint)offset;
161   if (UseCompressedOops) {
162     narrowOop narrow_oop = *(narrowOop*)addr;
163     if (CompressedOops::is_null(narrow_oop)) return nullptr;
164     return (void*)CompressedOops::decode_raw(narrow_oop);
165   } else {
166     return *(void**)addr;
167   }
168 }
169 
170 oop oopDesc::obj_field_acquire(int offset) const                      { return HeapAccess<MO_ACQUIRE>::oop_load_at(as_oop(), offset); }

125 bool oopDesc::is_oop(oop obj) {
126   return Universe::heap()->is_oop(obj);
127 }
128 
129 // used only for asserts and guarantees
130 bool oopDesc::is_oop_or_null(oop obj) {
131   return obj == nullptr ? true : is_oop(obj);
132 }
133 
134 VerifyOopClosure VerifyOopClosure::verify_oop;
135 
136 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
137   oop obj = RawAccess<>::oop_load(p);
138   guarantee(oopDesc::is_oop_or_null(obj), "invalid oop: " PTR_FORMAT, p2i(obj));
139 }
140 
141 void VerifyOopClosure::do_oop(oop* p)       { VerifyOopClosure::do_oop_work(p); }
142 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
143 
144 // type test operations that doesn't require inclusion of oop.inline.hpp.
145 bool oopDesc::is_instance_noinline()        const { return is_instance();         }
146 bool oopDesc::is_instanceRef_noinline()     const { return is_instanceRef();      }
147 bool oopDesc::is_stackChunk_noinline()      const { return is_stackChunk();       }
148 bool oopDesc::is_array_noinline()           const { return is_array();            }
149 bool oopDesc::is_objArray_noinline()        const { return is_objArray();         }
150 bool oopDesc::is_refArray_noinline()        const { return is_refArray();         }
151 bool oopDesc::is_typeArray_noinline()       const { return is_typeArray();        }
152 bool oopDesc::is_flatArray_noinline()       const { return is_flatArray();        }
153 
154 #if INCLUDE_CDS_JAVA_HEAP
155 void oopDesc::set_narrow_klass(narrowKlass nk) {
156   assert(CDSConfig::is_dumping_heap(), "Used by CDS only. Do not abuse!");
157   _compressed_klass = nk;
158 }
159 #endif
160 
161 void* oopDesc::load_oop_raw(oop obj, int offset) {
162   uintptr_t addr = (uintptr_t)(void*)obj + (uint)offset;
163   if (UseCompressedOops) {
164     narrowOop narrow_oop = *(narrowOop*)addr;
165     if (CompressedOops::is_null(narrow_oop)) return nullptr;
166     return (void*)CompressedOops::decode_raw(narrow_oop);
167   } else {
168     return *(void**)addr;
169   }
170 }
171 
172 oop oopDesc::obj_field_acquire(int offset) const                      { return HeapAccess<MO_ACQUIRE>::oop_load_at(as_oop(), offset); }
< prev index next >