1 /*
2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
131 oop(bottom)->oop_iterate(cl2, mr);
132 }
133 }
134 }
135
136 // Minimum region size; we won't go lower than that.
137 // We might want to decrease this in the future, to deal with small
138 // heaps a bit more efficiently.
139 #define MIN_REGION_SIZE ( 1024 * 1024 )
140
141 // Maximum region size; we don't go higher than that. There's a good
142 // reason for having an upper bound. We don't want regions to get too
143 // large, otherwise cleanup's effectiveness would decrease as there
144 // will be fewer opportunities to find totally empty regions after
145 // marking.
146 #define MAX_REGION_SIZE ( 32 * 1024 * 1024 )
147
148 // The automatic region size calculation will try to have around this
149 // many regions in the heap (based on the min heap size).
150 #define TARGET_REGION_NUMBER 2048
151
152 void HeapRegion::setup_heap_region_size(uintx min_heap_size) {
153 // region_size in bytes
154 uintx region_size = G1HeapRegionSize;
155 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
156 // We base the automatic calculation on the min heap size. This
157 // can be problematic if the spread between min and max is quite
158 // wide, imagine -Xms128m -Xmx32g. But, if we decided it based on
159 // the max size, the region size might be way too large for the
160 // min size. Either way, some users might have to set the region
161 // size manually for some -Xms / -Xmx combos.
162
163 region_size = MAX2(min_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.
|
1 /*
2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
131 oop(bottom)->oop_iterate(cl2, mr);
132 }
133 }
134 }
135
136 // Minimum region size; we won't go lower than that.
137 // We might want to decrease this in the future, to deal with small
138 // heaps a bit more efficiently.
139 #define MIN_REGION_SIZE ( 1024 * 1024 )
140
141 // Maximum region size; we don't go higher than that. There's a good
142 // reason for having an upper bound. We don't want regions to get too
143 // large, otherwise cleanup's effectiveness would decrease as there
144 // will be fewer opportunities to find totally empty regions after
145 // marking.
146 #define MAX_REGION_SIZE ( 32 * 1024 * 1024 )
147
148 // The automatic region size calculation will try to have around this
149 // many regions in the heap (based on the min heap size).
150 #define TARGET_REGION_NUMBER 2048
151
152 size_t HeapRegion::max_region_size() {
153 return (size_t)MAX_REGION_SIZE;
154 }
155
156 void HeapRegion::setup_heap_region_size(uintx min_heap_size) {
157 // region_size in bytes
158 uintx region_size = G1HeapRegionSize;
159 if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
160 // We base the automatic calculation on the min heap size. This
161 // can be problematic if the spread between min and max is quite
162 // wide, imagine -Xms128m -Xmx32g. But, if we decided it based on
163 // the max size, the region size might be way too large for the
164 // min size. Either way, some users might have to set the region
165 // size manually for some -Xms / -Xmx combos.
166
167 region_size = MAX2(min_heap_size / TARGET_REGION_NUMBER,
168 (uintx) MIN_REGION_SIZE);
169 }
170
171 int region_size_log = log2_long((jlong) region_size);
172 // Recalculate the region size to make sure it's a power of
173 // 2. This means that region_size is the largest power of 2 that's
174 // <= what we've calculated so far.
|