src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp

Print this page




 385   const size_t bytes = align_size_up(raw_bytes, MAX2(page_sz, granularity));
 386 
 387   const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
 388     MAX2(page_sz, granularity);
 389   ReservedSpace rs(bytes, rs_align, rs_align > 0);
 390   os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
 391                        rs.size());
 392 
 393   MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
 394 
 395   PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
 396   if (vspace != 0) {
 397     if (vspace->expand_by(bytes)) {
 398       return vspace;
 399     }
 400     delete vspace;
 401     // Release memory reserved in the space.
 402     rs.release();
 403   }
 404 

 405   return 0;
 406 }
 407 
 408 bool ParallelCompactData::initialize_region_data(size_t region_size)
 409 {
 410   const size_t count = (region_size + RegionSizeOffsetMask) >> Log2RegionSize;
 411   _region_vspace = create_vspace(count, sizeof(RegionData));
 412   if (_region_vspace != 0) {
 413     _region_data = (RegionData*)_region_vspace->reserved_low_addr();
 414     _region_count = count;
 415     return true;
 416   }
 417   return false;
 418 }
 419 
 420 void ParallelCompactData::clear()
 421 {
 422   memset(_region_data, 0, _region_vspace->committed_size());
 423 }
 424 




 385   const size_t bytes = align_size_up(raw_bytes, MAX2(page_sz, granularity));
 386 
 387   const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
 388     MAX2(page_sz, granularity);
 389   ReservedSpace rs(bytes, rs_align, rs_align > 0);
 390   os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
 391                        rs.size());
 392 
 393   MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
 394 
 395   PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
 396   if (vspace != 0) {
 397     if (vspace->expand_by(bytes)) {
 398       return vspace;
 399     }
 400     delete vspace;
 401     // Release memory reserved in the space.
 402     rs.release();
 403   }
 404 
 405   gclog_or_tty->print_cr("Allocation of " SIZE_FORMAT " bytes failed.", bytes);
 406   return 0;
 407 }
 408 
 409 bool ParallelCompactData::initialize_region_data(size_t region_size)
 410 {
 411   const size_t count = (region_size + RegionSizeOffsetMask) >> Log2RegionSize;
 412   _region_vspace = create_vspace(count, sizeof(RegionData));
 413   if (_region_vspace != 0) {
 414     _region_data = (RegionData*)_region_vspace->reserved_low_addr();
 415     _region_count = count;
 416     return true;
 417   }
 418   return false;
 419 }
 420 
 421 void ParallelCompactData::clear()
 422 {
 423   memset(_region_data, 0, _region_vspace->committed_size());
 424 }
 425