Mercurial > hg > graal-compiler
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 } |