< prev index next >

src/hotspot/share/gc/parallel/asPSYoungGen.cpp

Print this page




  59                                             size_t alignment) {
  60   assert(_init_gen_size != 0, "Should have a finite size");
  61   _virtual_space = new PSVirtualSpaceHighToLow(rs, alignment);
  62   if (!_virtual_space->expand_by(_init_gen_size)) {
  63     vm_exit_during_initialization("Could not reserve enough space for "
  64                                   "object heap");
  65   }
  66 }
  67 
  68 void ASPSYoungGen::initialize(ReservedSpace rs, size_t alignment) {
  69   initialize_virtual_space(rs, alignment);
  70   initialize_work();
  71 }
  72 
  73 size_t ASPSYoungGen::available_for_expansion() {
  74   size_t current_committed_size = virtual_space()->committed_size();
  75   assert((gen_size_limit() >= current_committed_size),
  76     "generation size limit is wrong");
  77   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
  78   size_t result =  gen_size_limit() - current_committed_size;
  79   size_t result_aligned = align_down(result, heap->generation_alignment());
  80   return result_aligned;
  81 }
  82 
  83 // Return the number of bytes the young gen is willing give up.
  84 //
  85 // Future implementations could check the survivors and if to_space is in the
  86 // right place (below from_space), take a chunk from to_space.
  87 size_t ASPSYoungGen::available_for_contraction() {
  88   size_t uncommitted_bytes = virtual_space()->uncommitted_size();
  89   if (uncommitted_bytes != 0) {
  90     return uncommitted_bytes;
  91   }
  92 
  93   if (eden_space()->is_empty()) {
  94     // Respect the minimum size for eden and for the young gen as a whole.
  95     ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
  96     const size_t eden_alignment = heap->space_alignment();
  97     const size_t gen_alignment = heap->generation_alignment();
  98 
  99     assert(eden_space()->capacity_in_bytes() >= eden_alignment,
 100       "Alignment is wrong");
 101     size_t eden_avail = eden_space()->capacity_in_bytes() - eden_alignment;
 102     eden_avail = align_down(eden_avail, gen_alignment);
 103 
 104     assert(virtual_space()->committed_size() >= min_gen_size(),
 105       "minimum gen size is wrong");
 106     size_t gen_avail = virtual_space()->committed_size() - min_gen_size();
 107     assert(virtual_space()->is_aligned(gen_avail), "not aligned");
 108 
 109     const size_t max_contraction = MIN2(eden_avail, gen_avail);
 110     // See comment for ASPSOldGen::available_for_contraction()
 111     // for reasons the "increment" fraction is used.
 112     PSAdaptiveSizePolicy* policy = heap->size_policy();
 113     size_t result = policy->eden_increment_aligned_down(max_contraction);
 114     size_t result_aligned = align_down(result, gen_alignment);
 115 
 116     log_trace(gc, ergo)("ASPSYoungGen::available_for_contraction: " SIZE_FORMAT " K", result_aligned/K);
 117     log_trace(gc, ergo)("  max_contraction " SIZE_FORMAT " K", max_contraction/K);




  59                                             size_t alignment) {
  60   assert(_init_gen_size != 0, "Should have a finite size");
  61   _virtual_space = new PSVirtualSpaceHighToLow(rs, alignment);
  62   if (!_virtual_space->expand_by(_init_gen_size)) {
  63     vm_exit_during_initialization("Could not reserve enough space for "
  64                                   "object heap");
  65   }
  66 }
  67 
  68 void ASPSYoungGen::initialize(ReservedSpace rs, size_t alignment) {
  69   initialize_virtual_space(rs, alignment);
  70   initialize_work();
  71 }
  72 
  73 size_t ASPSYoungGen::available_for_expansion() {
  74   size_t current_committed_size = virtual_space()->committed_size();
  75   assert((gen_size_limit() >= current_committed_size),
  76     "generation size limit is wrong");
  77   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
  78   size_t result =  gen_size_limit() - current_committed_size;
  79   size_t result_aligned = align_down(result, heap->gen_alignment());
  80   return result_aligned;
  81 }
  82 
  83 // Return the number of bytes the young gen is willing give up.
  84 //
  85 // Future implementations could check the survivors and if to_space is in the
  86 // right place (below from_space), take a chunk from to_space.
  87 size_t ASPSYoungGen::available_for_contraction() {
  88   size_t uncommitted_bytes = virtual_space()->uncommitted_size();
  89   if (uncommitted_bytes != 0) {
  90     return uncommitted_bytes;
  91   }
  92 
  93   if (eden_space()->is_empty()) {
  94     // Respect the minimum size for eden and for the young gen as a whole.
  95     ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
  96     const size_t eden_alignment = heap->space_alignment();
  97     const size_t gen_alignment = heap->gen_alignment();
  98 
  99     assert(eden_space()->capacity_in_bytes() >= eden_alignment,
 100       "Alignment is wrong");
 101     size_t eden_avail = eden_space()->capacity_in_bytes() - eden_alignment;
 102     eden_avail = align_down(eden_avail, gen_alignment);
 103 
 104     assert(virtual_space()->committed_size() >= min_gen_size(),
 105       "minimum gen size is wrong");
 106     size_t gen_avail = virtual_space()->committed_size() - min_gen_size();
 107     assert(virtual_space()->is_aligned(gen_avail), "not aligned");
 108 
 109     const size_t max_contraction = MIN2(eden_avail, gen_avail);
 110     // See comment for ASPSOldGen::available_for_contraction()
 111     // for reasons the "increment" fraction is used.
 112     PSAdaptiveSizePolicy* policy = heap->size_policy();
 113     size_t result = policy->eden_increment_aligned_down(max_contraction);
 114     size_t result_aligned = align_down(result, gen_alignment);
 115 
 116     log_trace(gc, ergo)("ASPSYoungGen::available_for_contraction: " SIZE_FORMAT " K", result_aligned/K);
 117     log_trace(gc, ergo)("  max_contraction " SIZE_FORMAT " K", max_contraction/K);


< prev index next >