src/share/vm/gc_implementation/g1/heapRegion.cpp

Print this page




 144 // Maximum region size; we don't go higher than that. There's a good
 145 // reason for having an upper bound. We don't want regions to get too
 146 // large, otherwise cleanup's effectiveness would decrease as there
 147 // will be fewer opportunities to find totally empty regions after
 148 // marking.
 149 #define MAX_REGION_SIZE  ( 32 * 1024 * 1024 )
 150 
 151 // The automatic region size calculation will try to have around this
 152 // many regions in the heap (based on the min heap size).
 153 #define TARGET_REGION_NUMBER          2048
 154 
 155 size_t HeapRegion::max_region_size() {
 156   return (size_t)MAX_REGION_SIZE;
 157 }
 158 
 159 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) {
 160   uintx region_size = G1HeapRegionSize;
 161   if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
 162     size_t average_heap_size = (initial_heap_size + max_heap_size) / 2;
 163     region_size = MAX2(average_heap_size / TARGET_REGION_NUMBER,
 164                        (uintx) MIN_REGION_SIZE);
 165   }
 166 
 167   int region_size_log = log2_long((jlong) region_size);
 168   // Recalculate the region size to make sure it's a power of
 169   // 2. This means that region_size is the largest power of 2 that's
 170   // <= what we've calculated so far.
 171   region_size = ((uintx)1 << region_size_log);
 172 
 173   // Now make sure that we don't go over or under our limits.
 174   if (region_size < MIN_REGION_SIZE) {
 175     region_size = MIN_REGION_SIZE;
 176   } else if (region_size > MAX_REGION_SIZE) {
 177     region_size = MAX_REGION_SIZE;
 178   }
 179 
 180   // And recalculate the log.
 181   region_size_log = log2_long((jlong) region_size);
 182 
 183   // Now, set up the globals.
 184   guarantee(LogOfHRGrainBytes == 0, "we should only set it once");




 144 // Maximum region size; we don't go higher than that. There's a good
 145 // reason for having an upper bound. We don't want regions to get too
 146 // large, otherwise cleanup's effectiveness would decrease as there
 147 // will be fewer opportunities to find totally empty regions after
 148 // marking.
 149 #define MAX_REGION_SIZE  ( 32 * 1024 * 1024 )
 150 
 151 // The automatic region size calculation will try to have around this
 152 // many regions in the heap (based on the min heap size).
 153 #define TARGET_REGION_NUMBER          2048
 154 
 155 size_t HeapRegion::max_region_size() {
 156   return (size_t)MAX_REGION_SIZE;
 157 }
 158 
 159 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) {
 160   uintx region_size = G1HeapRegionSize;
 161   if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
 162     size_t average_heap_size = (initial_heap_size + max_heap_size) / 2;
 163     region_size = MAX2(average_heap_size / TARGET_REGION_NUMBER,
 164                        (size_t) MIN_REGION_SIZE);
 165   }
 166 
 167   int region_size_log = log2_long((jlong) region_size);
 168   // Recalculate the region size to make sure it's a power of
 169   // 2. This means that region_size is the largest power of 2 that's
 170   // <= what we've calculated so far.
 171   region_size = ((uintx)1 << region_size_log);
 172 
 173   // Now make sure that we don't go over or under our limits.
 174   if (region_size < MIN_REGION_SIZE) {
 175     region_size = MIN_REGION_SIZE;
 176   } else if (region_size > MAX_REGION_SIZE) {
 177     region_size = MAX_REGION_SIZE;
 178   }
 179 
 180   // And recalculate the log.
 181   region_size_log = log2_long((jlong) region_size);
 182 
 183   // Now, set up the globals.
 184   guarantee(LogOfHRGrainBytes == 0, "we should only set it once");