< prev index next >

src/hotspot/share/runtime/handles.inline.hpp

Print this page

 44 }
 45 
 46 inline void Handle::replace(oop obj) {
 47   // Unlike in OopHandle::replace, we shouldn't use a barrier here.
 48   // OopHandle has its storage in OopStorage, which is walked concurrently and uses barriers.
 49   // Handle is thread private, and iterated by Thread::oops_do, which is why it shouldn't have any barriers at all.
 50   assert(_handle != nullptr, "should not use replace");
 51   *_handle = obj;
 52 }
 53 
 54 // Inline constructors for Specific Handles for different oop types
 55 #define DEF_HANDLE_CONSTR(type, is_a)                   \
 56 inline type##Handle::type##Handle (Thread* thread, type##Oop obj) : Handle(thread, (oop)obj) { \
 57   assert(is_null() || ((oop)obj)->is_a(), "illegal type");                \
 58 }
 59 
 60 DEF_HANDLE_CONSTR(instance , is_instance_noinline )
 61 DEF_HANDLE_CONSTR(array    , is_array_noinline    )
 62 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline )
 63 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline)

 64 
 65 // Constructor for metadata handles
 66 #define DEF_METADATA_HANDLE_FN(name, type) \
 67 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \
 68   if (obj != nullptr) {                                                   \
 69     assert(((Metadata*)obj)->is_valid(), "obj is valid");              \
 70     assert(_thread == Thread::current(), "thread must be current");    \
 71     assert(_thread->is_in_live_stack((address)this), "not on stack?"); \
 72     _thread->metadata_handles()->push((Metadata*)obj);                 \
 73   }                                                                    \
 74 }                                                                      \
 75 
 76 DEF_METADATA_HANDLE_FN(method, Method)
 77 DEF_METADATA_HANDLE_FN(constantPool, ConstantPool)
 78 
 79 inline void HandleMark::push() {
 80   // This is intentionally a NOP. pop_and_restore will reset
 81   // values to the HandleMark further down the stack, typically
 82   // in JavaCalls::call_helper.
 83   debug_only(_area->_handle_mark_nesting++);

 44 }
 45 
 46 inline void Handle::replace(oop obj) {
 47   // Unlike in OopHandle::replace, we shouldn't use a barrier here.
 48   // OopHandle has its storage in OopStorage, which is walked concurrently and uses barriers.
 49   // Handle is thread private, and iterated by Thread::oops_do, which is why it shouldn't have any barriers at all.
 50   assert(_handle != nullptr, "should not use replace");
 51   *_handle = obj;
 52 }
 53 
 54 // Inline constructors for Specific Handles for different oop types
 55 #define DEF_HANDLE_CONSTR(type, is_a)                   \
 56 inline type##Handle::type##Handle (Thread* thread, type##Oop obj) : Handle(thread, (oop)obj) { \
 57   assert(is_null() || ((oop)obj)->is_a(), "illegal type");                \
 58 }
 59 
 60 DEF_HANDLE_CONSTR(instance , is_instance_noinline )
 61 DEF_HANDLE_CONSTR(array    , is_array_noinline    )
 62 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline )
 63 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline)
 64 DEF_HANDLE_CONSTR(flatArray, is_flatArray_noinline)
 65 
 66 // Constructor for metadata handles
 67 #define DEF_METADATA_HANDLE_FN(name, type) \
 68 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \
 69   if (obj != nullptr) {                                                   \
 70     assert(((Metadata*)obj)->is_valid(), "obj is valid");              \
 71     assert(_thread == Thread::current(), "thread must be current");    \
 72     assert(_thread->is_in_live_stack((address)this), "not on stack?"); \
 73     _thread->metadata_handles()->push((Metadata*)obj);                 \
 74   }                                                                    \
 75 }                                                                      \
 76 
 77 DEF_METADATA_HANDLE_FN(method, Method)
 78 DEF_METADATA_HANDLE_FN(constantPool, ConstantPool)
 79 
 80 inline void HandleMark::push() {
 81   // This is intentionally a NOP. pop_and_restore will reset
 82   // values to the HandleMark further down the stack, typically
 83   // in JavaCalls::call_helper.
 84   debug_only(_area->_handle_mark_nesting++);
< prev index next >