946 } else { |
946 } else { |
947 FLAG_SET_DEFAULT(UseSharedSpaces, false); |
947 FLAG_SET_DEFAULT(UseSharedSpaces, false); |
948 } |
948 } |
949 } |
949 } |
950 |
950 |
|
951 #ifndef KERNEL |
951 // If the user has chosen ParallelGCThreads > 0, we set UseParNewGC |
952 // If the user has chosen ParallelGCThreads > 0, we set UseParNewGC |
952 // if it's not explictly set or unset. If the user has chosen |
953 // if it's not explictly set or unset. If the user has chosen |
953 // UseParNewGC and not explicitly set ParallelGCThreads we |
954 // UseParNewGC and not explicitly set ParallelGCThreads we |
954 // set it, unless this is a single cpu machine. |
955 // set it, unless this is a single cpu machine. |
955 void Arguments::set_parnew_gc_flags() { |
956 void Arguments::set_parnew_gc_flags() { |
1175 // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim |
1176 // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim |
1176 // is. In this situtation let CMSParPromoteBlocksToClaim follow |
1177 // is. In this situtation let CMSParPromoteBlocksToClaim follow |
1177 // the value (either from the command line or ergonomics) of |
1178 // the value (either from the command line or ergonomics) of |
1178 // OldPLABSize. Following OldPLABSize is an ergonomics decision. |
1179 // OldPLABSize. Following OldPLABSize is an ergonomics decision. |
1179 FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize); |
1180 FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize); |
1180 } |
1181 } else { |
1181 else { |
|
1182 // OldPLABSize and CMSParPromoteBlocksToClaim are both set. |
1182 // OldPLABSize and CMSParPromoteBlocksToClaim are both set. |
1183 // CMSParPromoteBlocksToClaim is a collector-specific flag, so |
1183 // CMSParPromoteBlocksToClaim is a collector-specific flag, so |
1184 // we'll let it to take precedence. |
1184 // we'll let it to take precedence. |
1185 jio_fprintf(defaultStream::error_stream(), |
1185 jio_fprintf(defaultStream::error_stream(), |
1186 "Both OldPLABSize and CMSParPromoteBlocksToClaim" |
1186 "Both OldPLABSize and CMSParPromoteBlocksToClaim" |
1187 " options are specified for the CMS collector." |
1187 " options are specified for the CMS collector." |
1188 " CMSParPromoteBlocksToClaim will take precedence.\n"); |
1188 " CMSParPromoteBlocksToClaim will take precedence.\n"); |
1189 } |
1189 } |
1190 } |
1190 } |
1191 } |
1191 if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) { |
|
1192 // OldPLAB sizing manually turned off: Use a larger default setting, |
|
1193 // unless it was manually specified. This is because a too-low value |
|
1194 // will slow down scavenges. |
|
1195 if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { |
|
1196 FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, 50); // default value before 6631166 |
|
1197 } |
|
1198 } |
|
1199 // Overwrite OldPLABSize which is the variable we will internally use everywhere. |
|
1200 FLAG_SET_ERGO(uintx, OldPLABSize, CMSParPromoteBlocksToClaim); |
|
1201 // If either of the static initialization defaults have changed, note this |
|
1202 // modification. |
|
1203 if (!FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim) || !FLAG_IS_DEFAULT(OldPLABWeight)) { |
|
1204 CFLS_LAB::modify_initialization(OldPLABSize, OldPLABWeight); |
|
1205 } |
|
1206 } |
|
1207 #endif // KERNEL |
1192 |
1208 |
1193 inline uintx max_heap_for_compressed_oops() { |
1209 inline uintx max_heap_for_compressed_oops() { |
1194 LP64_ONLY(return oopDesc::OopEncodingHeapMax - MaxPermSize - os::vm_page_size()); |
1210 LP64_ONLY(return oopDesc::OopEncodingHeapMax - MaxPermSize - os::vm_page_size()); |
1195 NOT_LP64(ShouldNotReachHere(); return 0); |
1211 NOT_LP64(ShouldNotReachHere(); return 0); |
1196 } |
1212 } |
2368 #else // ndef SOLARIS |
2384 #else // ndef SOLARIS |
2369 jio_fprintf(defaultStream::error_stream(), |
2385 jio_fprintf(defaultStream::error_stream(), |
2370 "ExtendedDTraceProbes flag is only applicable on Solaris\n"); |
2386 "ExtendedDTraceProbes flag is only applicable on Solaris\n"); |
2371 return JNI_EINVAL; |
2387 return JNI_EINVAL; |
2372 #endif // ndef SOLARIS |
2388 #endif // ndef SOLARIS |
2373 } else |
|
2374 #ifdef ASSERT |
2389 #ifdef ASSERT |
2375 if (match_option(option, "-XX:+FullGCALot", &tail)) { |
2390 } else if (match_option(option, "-XX:+FullGCALot", &tail)) { |
2376 FLAG_SET_CMDLINE(bool, FullGCALot, true); |
2391 FLAG_SET_CMDLINE(bool, FullGCALot, true); |
2377 // disable scavenge before parallel mark-compact |
2392 // disable scavenge before parallel mark-compact |
2378 FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); |
2393 FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); |
2379 } else |
|
2380 #endif |
2394 #endif |
2381 if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) { |
2395 } else if (match_option(option, "-XX:CMSParPromoteBlocksToClaim=", &tail)) { |
2382 julong cms_blocks_to_claim = (julong)atol(tail); |
2396 julong cms_blocks_to_claim = (julong)atol(tail); |
2383 FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); |
2397 FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); |
2384 jio_fprintf(defaultStream::error_stream(), |
2398 jio_fprintf(defaultStream::error_stream(), |
2385 "Please use -XX:CMSParPromoteBlocksToClaim in place of " |
2399 "Please use -XX:OldPLABSize in place of " |
|
2400 "-XX:CMSParPromoteBlocksToClaim in the future\n"); |
|
2401 } else if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) { |
|
2402 julong cms_blocks_to_claim = (julong)atol(tail); |
|
2403 FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); |
|
2404 jio_fprintf(defaultStream::error_stream(), |
|
2405 "Please use -XX:OldPLABSize in place of " |
2386 "-XX:ParCMSPromoteBlocksToClaim in the future\n"); |
2406 "-XX:ParCMSPromoteBlocksToClaim in the future\n"); |
2387 } else |
2407 } else if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) { |
2388 if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) { |
|
2389 julong old_plab_size = 0; |
2408 julong old_plab_size = 0; |
2390 ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1); |
2409 ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1); |
2391 if (errcode != arg_in_range) { |
2410 if (errcode != arg_in_range) { |
2392 jio_fprintf(defaultStream::error_stream(), |
2411 jio_fprintf(defaultStream::error_stream(), |
2393 "Invalid old PLAB size: %s\n", option->optionString); |
2412 "Invalid old PLAB size: %s\n", option->optionString); |
2396 } |
2415 } |
2397 FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size); |
2416 FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size); |
2398 jio_fprintf(defaultStream::error_stream(), |
2417 jio_fprintf(defaultStream::error_stream(), |
2399 "Please use -XX:OldPLABSize in place of " |
2418 "Please use -XX:OldPLABSize in place of " |
2400 "-XX:ParallelGCOldGenAllocBufferSize in the future\n"); |
2419 "-XX:ParallelGCOldGenAllocBufferSize in the future\n"); |
2401 } else |
2420 } else if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) { |
2402 if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) { |
|
2403 julong young_plab_size = 0; |
2421 julong young_plab_size = 0; |
2404 ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1); |
2422 ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1); |
2405 if (errcode != arg_in_range) { |
2423 if (errcode != arg_in_range) { |
2406 jio_fprintf(defaultStream::error_stream(), |
2424 jio_fprintf(defaultStream::error_stream(), |
2407 "Invalid young PLAB size: %s\n", option->optionString); |
2425 "Invalid young PLAB size: %s\n", option->optionString); |
2410 } |
2428 } |
2411 FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size); |
2429 FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size); |
2412 jio_fprintf(defaultStream::error_stream(), |
2430 jio_fprintf(defaultStream::error_stream(), |
2413 "Please use -XX:YoungPLABSize in place of " |
2431 "Please use -XX:YoungPLABSize in place of " |
2414 "-XX:ParallelGCToSpaceAllocBufferSize in the future\n"); |
2432 "-XX:ParallelGCToSpaceAllocBufferSize in the future\n"); |
2415 } else |
2433 } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx |
2416 if (match_option(option, "-XX:", &tail)) { // -XX:xxxx |
|
2417 // Skip -XX:Flags= since that case has already been handled |
2434 // Skip -XX:Flags= since that case has already been handled |
2418 if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { |
2435 if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { |
2419 if (!process_argument(tail, args->ignoreUnrecognized, origin)) { |
2436 if (!process_argument(tail, args->ignoreUnrecognized, origin)) { |
2420 return JNI_EINVAL; |
2437 return JNI_EINVAL; |
2421 } |
2438 } |
2725 // Check the GC selections again. |
2742 // Check the GC selections again. |
2726 if (!check_gc_consistency()) { |
2743 if (!check_gc_consistency()) { |
2727 return JNI_EINVAL; |
2744 return JNI_EINVAL; |
2728 } |
2745 } |
2729 |
2746 |
|
2747 #ifndef KERNEL |
2730 if (UseConcMarkSweepGC) { |
2748 if (UseConcMarkSweepGC) { |
2731 // Set flags for CMS and ParNew. Check UseConcMarkSweep first |
2749 // Set flags for CMS and ParNew. Check UseConcMarkSweep first |
2732 // to ensure that when both UseConcMarkSweepGC and UseParNewGC |
2750 // to ensure that when both UseConcMarkSweepGC and UseParNewGC |
2733 // are true, we don't call set_parnew_gc_flags() as well. |
2751 // are true, we don't call set_parnew_gc_flags() as well. |
2734 set_cms_and_parnew_gc_flags(); |
2752 set_cms_and_parnew_gc_flags(); |