< prev index next >

src/hotspot/share/oops/oop.cpp

Print this page

132   }
133   return LockingMode == LM_LIGHTWEIGHT || !SafepointSynchronize::is_at_safepoint();
134 }
135 
136 // used only for asserts and guarantees
137 bool oopDesc::is_oop_or_null(oop obj, bool ignore_mark_word) {
138   return obj == nullptr ? true : is_oop(obj, ignore_mark_word);
139 }
140 
141 VerifyOopClosure VerifyOopClosure::verify_oop;
142 
143 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
144   oop obj = RawAccess<>::oop_load(p);
145   guarantee(oopDesc::is_oop_or_null(obj), "invalid oop: " PTR_FORMAT, p2i(obj));
146 }
147 
148 void VerifyOopClosure::do_oop(oop* p)       { VerifyOopClosure::do_oop_work(p); }
149 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
150 
151 // type test operations that doesn't require inclusion of oop.inline.hpp.
152 bool oopDesc::is_instance_noinline()    const { return is_instance();    }
153 bool oopDesc::is_instanceRef_noinline() const { return is_instanceRef(); }
154 bool oopDesc::is_stackChunk_noinline()  const { return is_stackChunk();  }
155 bool oopDesc::is_array_noinline()       const { return is_array();       }
156 bool oopDesc::is_objArray_noinline()    const { return is_objArray();    }
157 bool oopDesc::is_typeArray_noinline()   const { return is_typeArray();   }


158 
159 bool oopDesc::has_klass_gap() {
160   // Only has a klass gap when compressed class pointers are used.
161   return UseCompressedClassPointers;
162 }
163 
164 #if INCLUDE_CDS_JAVA_HEAP
165 void oopDesc::set_narrow_klass(narrowKlass nk) {
166   assert(CDSConfig::is_dumping_heap(), "Used by CDS only. Do not abuse!");
167   assert(UseCompressedClassPointers, "must be");
168   _metadata._compressed_klass = nk;
169 }
170 #endif
171 
172 void* oopDesc::load_klass_raw(oop obj) {
173   if (UseCompressedClassPointers) {
174     narrowKlass narrow_klass = obj->_metadata._compressed_klass;
175     if (narrow_klass == 0) return nullptr;
176     return (void*)CompressedKlassPointers::decode_raw(narrow_klass);
177   } else {

132   }
133   return LockingMode == LM_LIGHTWEIGHT || !SafepointSynchronize::is_at_safepoint();
134 }
135 
136 // used only for asserts and guarantees
137 bool oopDesc::is_oop_or_null(oop obj, bool ignore_mark_word) {
138   return obj == nullptr ? true : is_oop(obj, ignore_mark_word);
139 }
140 
141 VerifyOopClosure VerifyOopClosure::verify_oop;
142 
143 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
144   oop obj = RawAccess<>::oop_load(p);
145   guarantee(oopDesc::is_oop_or_null(obj), "invalid oop: " PTR_FORMAT, p2i(obj));
146 }
147 
148 void VerifyOopClosure::do_oop(oop* p)       { VerifyOopClosure::do_oop_work(p); }
149 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
150 
151 // type test operations that doesn't require inclusion of oop.inline.hpp.
152 bool oopDesc::is_instance_noinline()        const { return is_instance();         }
153 bool oopDesc::is_instanceRef_noinline()     const { return is_instanceRef();      }
154 bool oopDesc::is_stackChunk_noinline()      const { return is_stackChunk();       }
155 bool oopDesc::is_array_noinline()           const { return is_array();            }
156 bool oopDesc::is_objArray_noinline()        const { return is_objArray();         }
157 bool oopDesc::is_typeArray_noinline()       const { return is_typeArray();        }
158 bool oopDesc::is_flatArray_noinline()       const { return is_flatArray();        }
159 bool oopDesc::is_null_free_array_noinline() const { return is_null_free_array();  }
160 
161 bool oopDesc::has_klass_gap() {
162   // Only has a klass gap when compressed class pointers are used.
163   return UseCompressedClassPointers;
164 }
165 
166 #if INCLUDE_CDS_JAVA_HEAP
167 void oopDesc::set_narrow_klass(narrowKlass nk) {
168   assert(CDSConfig::is_dumping_heap(), "Used by CDS only. Do not abuse!");
169   assert(UseCompressedClassPointers, "must be");
170   _metadata._compressed_klass = nk;
171 }
172 #endif
173 
174 void* oopDesc::load_klass_raw(oop obj) {
175   if (UseCompressedClassPointers) {
176     narrowKlass narrow_klass = obj->_metadata._compressed_klass;
177     if (narrow_klass == 0) return nullptr;
178     return (void*)CompressedKlassPointers::decode_raw(narrow_klass);
179   } else {
< prev index next >