386
387 bool ParallelCompactData::initialize(MemRegion covered_region)
388 {
389 _region_start = covered_region.start();
390 const size_t region_size = covered_region.word_size();
391 DEBUG_ONLY(_region_end = _region_start + region_size;)
392
393 assert(region_align_down(_region_start) == _region_start,
394 "region start not aligned");
395 assert((region_size & RegionSizeOffsetMask) == 0,
396 "region size not a multiple of RegionSize");
397
398 bool result = initialize_region_data(region_size) && initialize_block_data();
399 return result;
400 }
401
402 PSVirtualSpace*
403 ParallelCompactData::create_vspace(size_t count, size_t element_size)
404 {
405 const size_t raw_bytes = count * element_size;
406 const size_t page_sz = os::page_size_for_region(raw_bytes, 10);
407 const size_t granularity = os::vm_allocation_granularity();
408 _reserved_byte_size = align_size_up(raw_bytes, MAX2(page_sz, granularity));
409
410 const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
411 MAX2(page_sz, granularity);
412 ReservedSpace rs(_reserved_byte_size, rs_align, rs_align > 0);
413 os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
414 rs.size());
415
416 MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
417
418 PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
419 if (vspace != 0) {
420 if (vspace->expand_by(_reserved_byte_size)) {
421 return vspace;
422 }
423 delete vspace;
424 // Release memory reserved in the space.
425 rs.release();
426 }
|
386
387 bool ParallelCompactData::initialize(MemRegion covered_region)
388 {
389 _region_start = covered_region.start();
390 const size_t region_size = covered_region.word_size();
391 DEBUG_ONLY(_region_end = _region_start + region_size;)
392
393 assert(region_align_down(_region_start) == _region_start,
394 "region start not aligned");
395 assert((region_size & RegionSizeOffsetMask) == 0,
396 "region size not a multiple of RegionSize");
397
398 bool result = initialize_region_data(region_size) && initialize_block_data();
399 return result;
400 }
401
402 PSVirtualSpace*
403 ParallelCompactData::create_vspace(size_t count, size_t element_size)
404 {
405 const size_t raw_bytes = count * element_size;
406 const size_t page_sz = os::page_size_for_region_aligned(raw_bytes, 10);
407 const size_t granularity = os::vm_allocation_granularity();
408 _reserved_byte_size = align_size_up(raw_bytes, MAX2(page_sz, granularity));
409
410 const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
411 MAX2(page_sz, granularity);
412 ReservedSpace rs(_reserved_byte_size, rs_align, rs_align > 0);
413 os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
414 rs.size());
415
416 MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
417
418 PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
419 if (vspace != 0) {
420 if (vspace->expand_by(_reserved_byte_size)) {
421 return vspace;
422 }
423 delete vspace;
424 // Release memory reserved in the space.
425 rs.release();
426 }
|