src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
Print this page
*** 354,363 ****
--- 354,364 ----
ParallelCompactData::ParallelCompactData()
{
_region_start = 0;
_region_vspace = 0;
+ _reserved_byte_size = 0;
_region_data = 0;
_region_count = 0;
}
bool ParallelCompactData::initialize(MemRegion covered_region)
*** 380,402 ****
ParallelCompactData::create_vspace(size_t count, size_t element_size)
{
const size_t raw_bytes = count * element_size;
const size_t page_sz = os::page_size_for_region(raw_bytes, raw_bytes, 10);
const size_t granularity = os::vm_allocation_granularity();
! const size_t bytes = align_size_up(raw_bytes, MAX2(page_sz, granularity));
const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
MAX2(page_sz, granularity);
! ReservedSpace rs(bytes, rs_align, rs_align > 0);
os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
rs.size());
MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
if (vspace != 0) {
! if (vspace->expand_by(bytes)) {
return vspace;
}
delete vspace;
// Release memory reserved in the space.
rs.release();
--- 381,403 ----
ParallelCompactData::create_vspace(size_t count, size_t element_size)
{
const size_t raw_bytes = count * element_size;
const size_t page_sz = os::page_size_for_region(raw_bytes, raw_bytes, 10);
const size_t granularity = os::vm_allocation_granularity();
! _reserved_byte_size = align_size_up(raw_bytes, MAX2(page_sz, granularity));
const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
MAX2(page_sz, granularity);
! ReservedSpace rs(_reserved_byte_size, rs_align, rs_align > 0);
os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
rs.size());
MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
if (vspace != 0) {
! if (vspace->expand_by(_reserved_byte_size)) {
return vspace;
}
delete vspace;
// Release memory reserved in the space.
rs.release();
*** 839,856 ****
initialize_space_info();
initialize_dead_wood_limiter();
if (!_mark_bitmap.initialize(mr)) {
! vm_shutdown_during_initialization("Unable to allocate bit map for "
! "parallel garbage collection for the requested heap size.");
return false;
}
if (!_summary_data.initialize(mr)) {
! vm_shutdown_during_initialization("Unable to allocate tables for "
! "parallel garbage collection for the requested heap size.");
return false;
}
return true;
}
--- 840,861 ----
initialize_space_info();
initialize_dead_wood_limiter();
if (!_mark_bitmap.initialize(mr)) {
! vm_shutdown_during_initialization(
! err_msg("Unable to allocate " SIZE_FORMAT " byte bitmap "
! "for parallel garbage collection for the requested " SIZE_FORMAT " byte heap size.",
! _mark_bitmap.reserved_byte_size(), mr.byte_size()));
return false;
}
if (!_summary_data.initialize(mr)) {
! vm_shutdown_during_initialization(
! err_msg("Unable to allocate " SIZE_FORMAT " byte tables "
! "for parallel garbage collection for the requested " SIZE_FORMAT " byte heap size.",
! _summary_data.reserved_byte_size(), mr.byte_size()));
return false;
}
return true;
}