58 }
59 }
60
61 size_t ZNMethodDataOops::immediates_count() const {
62 return _nimmediates;
63 }
64
65 oop** ZNMethodDataOops::immediates_begin() const {
66 // The immediate oop* array starts immediately after this object
67 return (oop**)((uintptr_t)this + header_size());
68 }
69
70 oop** ZNMethodDataOops::immediates_end() const {
71 return immediates_begin() + immediates_count();
72 }
73
74 bool ZNMethodDataOops::has_non_immediates() const {
75 return _has_non_immediates;
76 }
77
78 ZNMethodData* ZNMethodData::create(nmethod* nm) {
79 void* const mem = ZNMethodAllocator::allocate(sizeof(ZNMethodData));
80 return ::new (mem) ZNMethodData(nm);
81 }
82
83 void ZNMethodData::destroy(ZNMethodData* data) {
84 ZNMethodAllocator::free(data->oops());
85 ZNMethodAllocator::free(data);
86 }
87
88 ZNMethodData::ZNMethodData(nmethod* nm) :
89 _lock(),
90 _oops(NULL) {}
91
92 ZReentrantLock* ZNMethodData::lock() {
93 return &_lock;
94 }
95
96 ZNMethodDataOops* ZNMethodData::oops() const {
97 return OrderAccess::load_acquire(&_oops);
98 }
99
100 ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) {
101 return Atomic::xchg(new_oops, &_oops);
102 }
|
58 }
59 }
60
61 size_t ZNMethodDataOops::immediates_count() const {
62 return _nimmediates;
63 }
64
65 oop** ZNMethodDataOops::immediates_begin() const {
66 // The immediate oop* array starts immediately after this object
67 return (oop**)((uintptr_t)this + header_size());
68 }
69
70 oop** ZNMethodDataOops::immediates_end() const {
71 return immediates_begin() + immediates_count();
72 }
73
74 bool ZNMethodDataOops::has_non_immediates() const {
75 return _has_non_immediates;
76 }
77
78 ZNMethodData::ZNMethodData() :
79 _lock(),
80 _oops(NULL) {}
81
82 ZNMethodData::~ZNMethodData() {
83 ZNMethodAllocator::free(_oops);
84 }
85
86 ZReentrantLock* ZNMethodData::lock() {
87 return &_lock;
88 }
89
90 ZNMethodDataOops* ZNMethodData::oops() const {
91 return OrderAccess::load_acquire(&_oops);
92 }
93
94 ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) {
95 return Atomic::xchg(new_oops, &_oops);
96 }
|