comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @ 10329:10f759898d40

7186737: Unable to allocate bit maps or card tables for parallel gc for the requested heap Summary: Print helpful error message when VM aborts due to inability of allocating bit maps or card tables Reviewed-by: jmasa, stefank Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Mon, 20 May 2013 10:44:33 -0700
parents 001ec9515f84
children 14d3f71f831d
comparison
equal deleted inserted replaced
10328:2138a2c14831 10329:10f759898d40
354 ParallelCompactData::ParallelCompactData() 354 ParallelCompactData::ParallelCompactData()
355 { 355 {
356 _region_start = 0; 356 _region_start = 0;
357 357
358 _region_vspace = 0; 358 _region_vspace = 0;
359 _reserved_byte_size = 0;
359 _region_data = 0; 360 _region_data = 0;
360 _region_count = 0; 361 _region_count = 0;
361 } 362 }
362 363
363 bool ParallelCompactData::initialize(MemRegion covered_region) 364 bool ParallelCompactData::initialize(MemRegion covered_region)
380 ParallelCompactData::create_vspace(size_t count, size_t element_size) 381 ParallelCompactData::create_vspace(size_t count, size_t element_size)
381 { 382 {
382 const size_t raw_bytes = count * element_size; 383 const size_t raw_bytes = count * element_size;
383 const size_t page_sz = os::page_size_for_region(raw_bytes, raw_bytes, 10); 384 const size_t page_sz = os::page_size_for_region(raw_bytes, raw_bytes, 10);
384 const size_t granularity = os::vm_allocation_granularity(); 385 const size_t granularity = os::vm_allocation_granularity();
385 const size_t bytes = align_size_up(raw_bytes, MAX2(page_sz, granularity)); 386 _reserved_byte_size = align_size_up(raw_bytes, MAX2(page_sz, granularity));
386 387
387 const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 : 388 const size_t rs_align = page_sz == (size_t) os::vm_page_size() ? 0 :
388 MAX2(page_sz, granularity); 389 MAX2(page_sz, granularity);
389 ReservedSpace rs(bytes, rs_align, rs_align > 0); 390 ReservedSpace rs(_reserved_byte_size, rs_align, rs_align > 0);
390 os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(), 391 os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(),
391 rs.size()); 392 rs.size());
392 393
393 MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); 394 MemTracker::record_virtual_memory_type((address)rs.base(), mtGC);
394 395
395 PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz); 396 PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz);
396 if (vspace != 0) { 397 if (vspace != 0) {
397 if (vspace->expand_by(bytes)) { 398 if (vspace->expand_by(_reserved_byte_size)) {
398 return vspace; 399 return vspace;
399 } 400 }
400 delete vspace; 401 delete vspace;
401 // Release memory reserved in the space. 402 // Release memory reserved in the space.
402 rs.release(); 403 rs.release();
838 839
839 initialize_space_info(); 840 initialize_space_info();
840 initialize_dead_wood_limiter(); 841 initialize_dead_wood_limiter();
841 842
842 if (!_mark_bitmap.initialize(mr)) { 843 if (!_mark_bitmap.initialize(mr)) {
843 vm_shutdown_during_initialization("Unable to allocate bit map for " 844 vm_shutdown_during_initialization(
844 "parallel garbage collection for the requested heap size."); 845 err_msg("Unable to allocate " SIZE_FORMAT "KB bitmaps for parallel "
846 "garbage collection for the requested " SIZE_FORMAT "KB heap.",
847 _mark_bitmap.reserved_byte_size()/K, mr.byte_size()/K));
845 return false; 848 return false;
846 } 849 }
847 850
848 if (!_summary_data.initialize(mr)) { 851 if (!_summary_data.initialize(mr)) {
849 vm_shutdown_during_initialization("Unable to allocate tables for " 852 vm_shutdown_during_initialization(
850 "parallel garbage collection for the requested heap size."); 853 err_msg("Unable to allocate " SIZE_FORMAT "KB card tables for parallel "
854 "garbage collection for the requested " SIZE_FORMAT "KB heap.",
855 _summary_data.reserved_byte_size()/K, mr.byte_size()/K));
851 return false; 856 return false;
852 } 857 }
853 858
854 return true; 859 return true;
855 } 860 }