1263 // Preferred young gen size for "short" pauses:
1264 // upper bound depends on # of threads and NewRatio.
1265 const uintx parallel_gc_threads =
1266 (ParallelGCThreads == 0 ? 1 : ParallelGCThreads);
1267 const size_t preferred_max_new_size_unaligned =
1268 MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * parallel_gc_threads));
1269 size_t preferred_max_new_size =
1270 align_size_up(preferred_max_new_size_unaligned, os::vm_page_size());
1271
1272 // Unless explicitly requested otherwise, size young gen
1273 // for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads
1274
1275 // If either MaxNewSize or NewRatio is set on the command line,
1276 // assume the user is trying to set the size of the young gen.
1277 if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) {
1278
1279 // Set MaxNewSize to our calculated preferred_max_new_size unless
1280 // NewSize was set on the command line and it is larger than
1281 // preferred_max_new_size.
1282 if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line
1283 FLAG_SET_ERGO(uintx, MaxNewSize, MAX2(NewSize, preferred_max_new_size));
1284 } else {
1285 FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size);
1286 }
1287 if (PrintGCDetails && Verbose) {
1288 // Too early to use gclog_or_tty
1289 tty->print_cr("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize);
1290 }
1291
1292 // Code along this path potentially sets NewSize and OldSize
1293 if (PrintGCDetails && Verbose) {
1294 // Too early to use gclog_or_tty
1295 tty->print_cr("CMS set min_heap_size: " SIZE_FORMAT
1296 " initial_heap_size: " SIZE_FORMAT
1297 " max_heap: " SIZE_FORMAT,
1298 min_heap_size(), InitialHeapSize, max_heap);
1299 }
1300 size_t min_new = preferred_max_new_size;
1301 if (FLAG_IS_CMDLINE(NewSize)) {
1302 min_new = NewSize;
1303 }
1304 if (max_heap > min_new && min_heap_size() > min_new) {
1305 // Unless explicitly requested otherwise, make young gen
1306 // at least min_new, and at most preferred_max_new_size.
1307 if (FLAG_IS_DEFAULT(NewSize)) {
1308 FLAG_SET_ERGO(uintx, NewSize, MAX2(NewSize, min_new));
1309 FLAG_SET_ERGO(uintx, NewSize, MIN2(preferred_max_new_size, NewSize));
1310 if (PrintGCDetails && Verbose) {
1311 // Too early to use gclog_or_tty
1312 tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
1313 }
1314 }
1315 // Unless explicitly requested otherwise, size old gen
1316 // so it's NewRatio x of NewSize.
1317 if (FLAG_IS_DEFAULT(OldSize)) {
1318 if (max_heap > NewSize) {
1319 FLAG_SET_ERGO(uintx, OldSize, MIN2(NewRatio*NewSize, max_heap - NewSize));
1320 if (PrintGCDetails && Verbose) {
1321 // Too early to use gclog_or_tty
1322 tty->print_cr("CMS ergo set OldSize: " SIZE_FORMAT, OldSize);
1323 }
1324 }
1325 }
1326 }
1327 }
1328 // Unless explicitly requested otherwise, definitely
1329 // promote all objects surviving "tenuring_default" scavenges.
1330 if (FLAG_IS_DEFAULT(MaxTenuringThreshold) &&
1331 FLAG_IS_DEFAULT(SurvivorRatio)) {
1332 FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default);
1333 }
1334 // If we decided above (or user explicitly requested)
1335 // `promote all' (via MaxTenuringThreshold := 0),
1336 // prefer minuscule survivor spaces so as not to waste
1337 // space for (non-existent) survivors
1338 if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) {
1339 FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio));
|
1263 // Preferred young gen size for "short" pauses:
1264 // upper bound depends on # of threads and NewRatio.
1265 const uintx parallel_gc_threads =
1266 (ParallelGCThreads == 0 ? 1 : ParallelGCThreads);
1267 const size_t preferred_max_new_size_unaligned =
1268 MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * parallel_gc_threads));
1269 size_t preferred_max_new_size =
1270 align_size_up(preferred_max_new_size_unaligned, os::vm_page_size());
1271
1272 // Unless explicitly requested otherwise, size young gen
1273 // for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads
1274
1275 // If either MaxNewSize or NewRatio is set on the command line,
1276 // assume the user is trying to set the size of the young gen.
1277 if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) {
1278
1279 // Set MaxNewSize to our calculated preferred_max_new_size unless
1280 // NewSize was set on the command line and it is larger than
1281 // preferred_max_new_size.
1282 if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line
1283 FLAG_SET_ERGO(uintx, MaxNewSize, MAX2((size_t)NewSize, preferred_max_new_size));
1284 } else {
1285 FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size);
1286 }
1287 if (PrintGCDetails && Verbose) {
1288 // Too early to use gclog_or_tty
1289 tty->print_cr("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize);
1290 }
1291
1292 // Code along this path potentially sets NewSize and OldSize
1293 if (PrintGCDetails && Verbose) {
1294 // Too early to use gclog_or_tty
1295 tty->print_cr("CMS set min_heap_size: " SIZE_FORMAT
1296 " initial_heap_size: " SIZE_FORMAT
1297 " max_heap: " SIZE_FORMAT,
1298 min_heap_size(), InitialHeapSize, max_heap);
1299 }
1300 size_t min_new = preferred_max_new_size;
1301 if (FLAG_IS_CMDLINE(NewSize)) {
1302 min_new = NewSize;
1303 }
1304 if (max_heap > min_new && min_heap_size() > min_new) {
1305 // Unless explicitly requested otherwise, make young gen
1306 // at least min_new, and at most preferred_max_new_size.
1307 if (FLAG_IS_DEFAULT(NewSize)) {
1308 FLAG_SET_ERGO(uintx, NewSize, MAX2((size_t)NewSize, min_new));
1309 FLAG_SET_ERGO(uintx, NewSize, MIN2(preferred_max_new_size, (size_t)NewSize));
1310 if (PrintGCDetails && Verbose) {
1311 // Too early to use gclog_or_tty
1312 tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
1313 }
1314 }
1315 // Unless explicitly requested otherwise, size old gen
1316 // so it's NewRatio x of NewSize.
1317 if (FLAG_IS_DEFAULT(OldSize)) {
1318 if (max_heap > NewSize) {
1319 FLAG_SET_ERGO(uintx, OldSize, MIN2((size_t)(NewRatio*NewSize), max_heap - NewSize));
1320 if (PrintGCDetails && Verbose) {
1321 // Too early to use gclog_or_tty
1322 tty->print_cr("CMS ergo set OldSize: " SIZE_FORMAT, OldSize);
1323 }
1324 }
1325 }
1326 }
1327 }
1328 // Unless explicitly requested otherwise, definitely
1329 // promote all objects surviving "tenuring_default" scavenges.
1330 if (FLAG_IS_DEFAULT(MaxTenuringThreshold) &&
1331 FLAG_IS_DEFAULT(SurvivorRatio)) {
1332 FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default);
1333 }
1334 // If we decided above (or user explicitly requested)
1335 // `promote all' (via MaxTenuringThreshold := 0),
1336 // prefer minuscule survivor spaces so as not to waste
1337 // space for (non-existent) survivors
1338 if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) {
1339 FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio));
|