diff --git a/src/hotspot/share/gc/z/zNMethodData.cpp b/src/hotspot/share/gc/z/zNMethodData.cpp index 56af0c6..0fd49e4 100644 --- a/src/hotspot/share/gc/z/zNMethodData.cpp +++ b/src/hotspot/share/gc/z/zNMethodData.cpp @@ -23,13 +23,13 @@ #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/globalCounter.inline.hpp" #include "utilities/growableArray.hpp" size_t ZNMethodDataOops::header_size() { @@ -42,12 +42,12 @@ ZNMethodDataOops* ZNMethodDataOops::create(const GrowableArray& 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); + void* const mem = NEW_C_HEAP_ARRAY(uint8_t, size, mtGC); return ::new (mem) ZNMethodDataOops(immediates, has_non_immediates); } void ZNMethodDataOops::destroy(ZNMethodDataOops* oops) { - ZNMethodAllocator::free(oops); + FREE_C_HEAP_ARRAY(uint8_t, oops); } ZNMethodDataOops::ZNMethodDataOops(const GrowableArray& immediates, bool has_non_immediates) : @@ -81,7 +81,7 @@ ZNMethodData::ZNMethodData() : _oops(NULL) {} ZNMethodData::~ZNMethodData() { - ZNMethodAllocator::free(_oops); + ZNMethodDataOops::destroy(_oops); } ZReentrantLock* ZNMethodData::lock() { @@ -93,5 +93,9 @@ ZNMethodDataOops* ZNMethodData::oops() const { } ZNMethodDataOops* ZNMethodData::swap_oops(ZNMethodDataOops* new_oops) { - return Atomic::xchg(new_oops, &_oops); + ZNMethodDataOops* const oops = Atomic::xchg(new_oops, &_oops); + if (oops != NULL) { + GlobalCounter::write_synchronize(); + } + return oops; }