< prev index next >

src/hotspot/share/gc/z/zNMethodData.cpp


*** 21,37 **** * questions. */ #include "precompiled.hpp" #include "gc/z/zLock.inline.hpp" - #include "gc/z/zNMethodAllocator.hpp" #include "gc/z/zNMethodData.hpp" #include "memory/allocation.hpp" #include "runtime/atomic.hpp" #include "runtime/orderAccess.hpp" #include "utilities/align.hpp" #include "utilities/debug.hpp" #include "utilities/growableArray.hpp" size_t ZNMethodDataOops::header_size() { const size_t size = sizeof(ZNMethodDataOops); assert(is_aligned(size, sizeof(oop*)), "Header misaligned"); --- 21,37 ---- * questions. */ #include "precompiled.hpp" #include "gc/z/zLock.inline.hpp" #include "gc/z/zNMethodData.hpp" #include "memory/allocation.hpp" #include "runtime/atomic.hpp" #include "runtime/orderAccess.hpp" #include "utilities/align.hpp" #include "utilities/debug.hpp" + #include "utilities/globalCounter.inline.hpp" #include "utilities/growableArray.hpp" size_t ZNMethodDataOops::header_size() { const size_t size = sizeof(ZNMethodDataOops); assert(is_aligned(size, sizeof(oop*)), "Header misaligned"); ***************
*** 40,55 **** ZNMethodDataOops* ZNMethodDataOops::create(const GrowableArray<oop*>& immediates, bool has_non_immediates) { // Allocate memory for the ZNMethodDataOops object // plus the immediate oop* array that follows right after. const size_t size = ZNMethodDataOops::header_size() + (sizeof(oop*) * immediates.length()); ! void* const mem = ZNMethodAllocator::allocate(size); return ::new (mem) ZNMethodDataOops(immediates, has_non_immediates); } void ZNMethodDataOops::destroy(ZNMethodDataOops* oops) { ! ZNMethodAllocator::free(oops); } ZNMethodDataOops::ZNMethodDataOops(const GrowableArray<oop*>& immediates, bool has_non_immediates) : _nimmediates(immediates.length()), _has_non_immediates(has_non_immediates) { --- 40,55 ---- ZNMethodDataOops* ZNMethodDataOops::create(const GrowableArray<oop*>& immediates, bool has_non_immediates) { // Allocate memory for the ZNMethodDataOops object // plus the immediate oop* array that follows right after. const size_t size = ZNMethodDataOops::header_size() + (sizeof(oop*) * immediates.length()); ! void* const mem = NEW_C_HEAP_ARRAY(uint8_t, size, mtGC); return ::new (mem) ZNMethodDataOops(immediates, has_non_immediates); } void ZNMethodDataOops::destroy(ZNMethodDataOops* oops) { ! FREE_C_HEAP_ARRAY(uint8_t, oops); } ZNMethodDataOops::ZNMethodDataOops(const GrowableArray<oop*>& immediates, bool has_non_immediates) : _nimmediates(immediates.length()), _has_non_immediates(has_non_immediates) { ***************
*** 79,89 **** ZNMethodData::ZNMethodData() : _lock(), _oops(NULL) {} ZNMethodData::~ZNMethodData() { ! ZNMethodAllocator::free(_oops); } ZReentrantLock* ZNMethodData::lock() { return &_lock; } --- 79,89 ---- ZNMethodData::ZNMethodData() : _lock(), _oops(NULL) {} ZNMethodData::~ZNMethodData() { ! ZNMethodDataOops::destroy(_oops); } ZReentrantLock* ZNMethodData::lock() { return &_lock; } ***************
*** 91,97 **** ZNMethodDataOops* ZNMethodData::oops() const { return OrderAccess::load_acquire(&_oops); } ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) { ! return Atomic::xchg(new_oops, &_oops); } --- 91,101 ---- ZNMethodDataOops* ZNMethodData::oops() const { return OrderAccess::load_acquire(&_oops); } ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) { ! ZNMethodDataOops* const oops = Atomic::xchg(new_oops, &_oops); ! if (oops != NULL) { ! GlobalCounter::write_synchronize(); ! } ! return oops; }
< prev index next >