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