8240590: Add MemRegion::destroy_array to complement introduced create_array

Reviewed-by: lkorinth, sjohanss
This commit is contained in:
Thomas Schatzl 2020-03-20 11:17:45 +01:00
parent e7204cbc52
commit cc83c45595
5 changed files with 21 additions and 9 deletions

View File

@ -269,7 +269,7 @@ G1CMRootMemRegions::G1CMRootMemRegions(uint const max_regions) :
_should_abort(false) { }
G1CMRootMemRegions::~G1CMRootMemRegions() {
FREE_C_HEAP_ARRAY(MemRegion, _root_regions);
MemRegion::destroy_array(_root_regions, _max_regions);
}
void G1CMRootMemRegions::reset() {

View File

@ -62,8 +62,8 @@ CardTable::CardTable(MemRegion whole_heap, bool conc_scan) :
}
CardTable::~CardTable() {
FREE_C_HEAP_ARRAY(MemRegion, _covered);
FREE_C_HEAP_ARRAY(MemRegion, _committed);
MemRegion::destroy_array(_covered, _max_covered_regions);
MemRegion::destroy_array(_committed, _max_covered_regions);
}
void CardTable::initialize() {

View File

@ -1782,10 +1782,11 @@ bool FileMapInfo::map_heap_data(MemRegion **heap_mem, int first,
struct Cleanup {
MemRegion* _regions;
uint _length;
bool _aborted;
Cleanup(MemRegion* regions) : _regions(regions), _aborted(true) { }
~Cleanup() { if (_aborted) { FREE_C_HEAP_ARRAY(MemRegion, _regions); } }
} cleanup(regions);
Cleanup(MemRegion* regions, uint length) : _regions(regions), _length(length), _aborted(true) { }
~Cleanup() { if (_aborted) { MemRegion::destroy_array(_regions, _length); } }
} cleanup(regions, max);
FileMapRegion* si;
int region_num = 0;

View File

@ -102,10 +102,20 @@ MemRegion MemRegion::minus(const MemRegion mr2) const {
return MemRegion();
}
MemRegion* MemRegion::create_array(uint length, MEMFLAGS flags) {
MemRegion* MemRegion::create_array(size_t length, MEMFLAGS flags) {
MemRegion* result = NEW_C_HEAP_ARRAY(MemRegion, length, flags);
for (uint i = 0; i < length; i++) {
for (size_t i = 0; i < length; i++) {
::new (&result[i]) MemRegion();
}
return result;
}
void MemRegion::destroy_array(MemRegion* array, size_t length) {
if (array == NULL) {
return;
}
for (size_t i = 0; i < length; i++) {
array[i].~MemRegion();
}
FREE_C_HEAP_ARRAY(MemRegion, array);
}

View File

@ -94,7 +94,8 @@ public:
bool is_empty() const { return word_size() == 0; }
// Creates and initializes an array of MemRegions of the given length.
static MemRegion* create_array(uint length, MEMFLAGS flags);
static MemRegion* create_array(size_t length, MEMFLAGS flags);
static void destroy_array(MemRegion* array, size_t length);
};
// For iteration over MemRegion's.