104 size_t HeapRegion::max_region_size() { |
104 size_t HeapRegion::max_region_size() { |
105 return HeapRegionBounds::max_size(); |
105 return HeapRegionBounds::max_size(); |
106 } |
106 } |
107 |
107 |
108 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) { |
108 void HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size) { |
109 uintx region_size = G1HeapRegionSize; |
109 size_t region_size = G1HeapRegionSize; |
110 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) { |
110 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) { |
111 size_t average_heap_size = (initial_heap_size + max_heap_size) / 2; |
111 size_t average_heap_size = (initial_heap_size + max_heap_size) / 2; |
112 region_size = MAX2(average_heap_size / HeapRegionBounds::target_number(), |
112 region_size = MAX2(average_heap_size / HeapRegionBounds::target_number(), |
113 (uintx) HeapRegionBounds::min_size()); |
113 HeapRegionBounds::min_size()); |
114 } |
114 } |
115 |
115 |
116 int region_size_log = log2_long((jlong) region_size); |
116 int region_size_log = log2_long((jlong) region_size); |
117 // Recalculate the region size to make sure it's a power of |
117 // Recalculate the region size to make sure it's a power of |
118 // 2. This means that region_size is the largest power of 2 that's |
118 // 2. This means that region_size is the largest power of 2 that's |
119 // <= what we've calculated so far. |
119 // <= what we've calculated so far. |
120 region_size = ((uintx)1 << region_size_log); |
120 region_size = ((size_t)1 << region_size_log); |
121 |
121 |
122 // Now make sure that we don't go over or under our limits. |
122 // Now make sure that we don't go over or under our limits. |
123 if (region_size < HeapRegionBounds::min_size()) { |
123 if (region_size < HeapRegionBounds::min_size()) { |
124 region_size = HeapRegionBounds::min_size(); |
124 region_size = HeapRegionBounds::min_size(); |
125 } else if (region_size > HeapRegionBounds::max_size()) { |
125 } else if (region_size > HeapRegionBounds::max_size()) { |
137 LogOfHRGrainWords = LogOfHRGrainBytes - LogHeapWordSize; |
137 LogOfHRGrainWords = LogOfHRGrainBytes - LogHeapWordSize; |
138 |
138 |
139 guarantee(GrainBytes == 0, "we should only set it once"); |
139 guarantee(GrainBytes == 0, "we should only set it once"); |
140 // The cast to int is safe, given that we've bounded region_size by |
140 // The cast to int is safe, given that we've bounded region_size by |
141 // MIN_REGION_SIZE and MAX_REGION_SIZE. |
141 // MIN_REGION_SIZE and MAX_REGION_SIZE. |
142 GrainBytes = (size_t)region_size; |
142 GrainBytes = region_size; |
143 |
143 |
144 guarantee(GrainWords == 0, "we should only set it once"); |
144 guarantee(GrainWords == 0, "we should only set it once"); |
145 GrainWords = GrainBytes >> LogHeapWordSize; |
145 GrainWords = GrainBytes >> LogHeapWordSize; |
146 guarantee((size_t) 1 << LogOfHRGrainWords == GrainWords, "sanity"); |
146 guarantee((size_t) 1 << LogOfHRGrainWords == GrainWords, "sanity"); |
147 |
147 |