290 { "PermMarkSweepDeadRatio", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 291 { "PermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 292 { "MaxPermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 293 { "MinPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 294 { "MaxPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 295 { "CMSRevisitStackSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 296 { "PrintRevisitStats", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 297 { "UseVectoredExceptions", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 298 { "UseSplitVerifier", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 299 { "UseISM", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 300 { "UsePermISM", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 301 { "UseMPSS", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 302 { "UseStringCache", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 303 { "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 304 { "SafepointPollOffset", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 305 #ifdef PRODUCT 306 { "DesiredMethodLimit", 307 JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) }, 308 #endif // PRODUCT 309 { "UseVMInterruptibleIO", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 310 { NULL, JDK_Version(0), JDK_Version(0) } 311 }; 312 313 // Returns true if the flag is obsolete and fits into the range specified 314 // for being ignored. In the case that the flag is ignored, the 'version' 315 // value is filled in with the version number when the flag became 316 // obsolete so that that value can be displayed to the user. 317 bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) { 318 int i = 0; 319 assert(version != NULL, "Must provide a version buffer"); 320 while (obsolete_jvm_flags[i].name != NULL) { 321 const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; 322 // <flag>=xxx form 323 // [-|+]<flag> form 324 if ((strncmp(flag_status.name, s, strlen(flag_status.name)) == 0) || 325 ((s[0] == '+' || s[0] == '-') && 326 (strncmp(flag_status.name, &s[1], strlen(flag_status.name)) == 0))) { 327 if (JDK_Version::current().compare(flag_status.accept_until) == -1) { 328 *version = flag_status.obsoleted_in; 329 return true; 2061 2062 // Check stack pages settings 2063 bool Arguments::check_stack_pages() 2064 { 2065 bool status = true; 2066 status = status && verify_min_value(StackYellowPages, 1, "StackYellowPages"); 2067 status = status && verify_min_value(StackRedPages, 1, "StackRedPages"); 2068 // greater stack shadow pages can't generate instruction to bang stack 2069 status = status && verify_interval(StackShadowPages, 1, 50, "StackShadowPages"); 2070 return status; 2071 } 2072 2073 // Check the consistency of vm_init_args 2074 bool Arguments::check_vm_args_consistency() { 2075 // Method for adding checks for flag consistency. 2076 // The intent is to warn the user of all possible conflicts, 2077 // before returning an error. 2078 // Note: Needs platform-dependent factoring. 2079 bool status = true; 2080 2081 // Allow both -XX:-UseStackBanging and -XX:-UseBoundThreads in non-product 2082 // builds so the cost of stack banging can be measured. 2083 #if (defined(PRODUCT) && defined(SOLARIS)) 2084 if (!UseBoundThreads && !UseStackBanging) { 2085 jio_fprintf(defaultStream::error_stream(), 2086 "-UseStackBanging conflicts with -UseBoundThreads\n"); 2087 2088 status = false; 2089 } 2090 #endif 2091 2092 if (TLABRefillWasteFraction == 0) { 2093 jio_fprintf(defaultStream::error_stream(), 2094 "TLABRefillWasteFraction should be a denominator, " 2095 "not " SIZE_FORMAT "\n", 2096 TLABRefillWasteFraction); 2097 status = false; 2098 } 2099 2100 status = status && verify_interval(AdaptiveSizePolicyWeight, 0, 100, 2101 "AdaptiveSizePolicyWeight"); 2102 status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance"); 2103 2104 // Divide by bucket size to prevent a large size from causing rollover when 2105 // calculating amount of memory needed to be allocated for the String table. 2106 status = status && verify_interval(StringTableSize, minimumStringTableSize, 2107 (max_uintx / StringTable::bucket_size()), "StringTable size"); 2108 2109 status = status && verify_interval(SymbolTableSize, minimumSymbolTableSize, 2110 (max_uintx / SymbolTable::bucket_size()), "SymbolTable size"); 2111 | 290 { "PermMarkSweepDeadRatio", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 291 { "PermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 292 { "MaxPermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 293 { "MinPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 294 { "MaxPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 295 { "CMSRevisitStackSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 296 { "PrintRevisitStats", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 297 { "UseVectoredExceptions", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 298 { "UseSplitVerifier", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 299 { "UseISM", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 300 { "UsePermISM", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 301 { "UseMPSS", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 302 { "UseStringCache", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 303 { "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 304 { "SafepointPollOffset", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 305 #ifdef PRODUCT 306 { "DesiredMethodLimit", 307 JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) }, 308 #endif // PRODUCT 309 { "UseVMInterruptibleIO", JDK_Version::jdk(8), JDK_Version::jdk(9) }, 310 { "UseBoundThreads", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 311 { "DefaultThreadPriority", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 312 { "NoYieldsInMicrolock", JDK_Version::jdk(9), JDK_Version::jdk(10) }, 313 { NULL, JDK_Version(0), JDK_Version(0) } 314 }; 315 316 // Returns true if the flag is obsolete and fits into the range specified 317 // for being ignored. In the case that the flag is ignored, the 'version' 318 // value is filled in with the version number when the flag became 319 // obsolete so that that value can be displayed to the user. 320 bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) { 321 int i = 0; 322 assert(version != NULL, "Must provide a version buffer"); 323 while (obsolete_jvm_flags[i].name != NULL) { 324 const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; 325 // <flag>=xxx form 326 // [-|+]<flag> form 327 if ((strncmp(flag_status.name, s, strlen(flag_status.name)) == 0) || 328 ((s[0] == '+' || s[0] == '-') && 329 (strncmp(flag_status.name, &s[1], strlen(flag_status.name)) == 0))) { 330 if (JDK_Version::current().compare(flag_status.accept_until) == -1) { 331 *version = flag_status.obsoleted_in; 332 return true; 2064 2065 // Check stack pages settings 2066 bool Arguments::check_stack_pages() 2067 { 2068 bool status = true; 2069 status = status && verify_min_value(StackYellowPages, 1, "StackYellowPages"); 2070 status = status && verify_min_value(StackRedPages, 1, "StackRedPages"); 2071 // greater stack shadow pages can't generate instruction to bang stack 2072 status = status && verify_interval(StackShadowPages, 1, 50, "StackShadowPages"); 2073 return status; 2074 } 2075 2076 // Check the consistency of vm_init_args 2077 bool Arguments::check_vm_args_consistency() { 2078 // Method for adding checks for flag consistency. 2079 // The intent is to warn the user of all possible conflicts, 2080 // before returning an error. 2081 // Note: Needs platform-dependent factoring. 2082 bool status = true; 2083 2084 if (TLABRefillWasteFraction == 0) { 2085 jio_fprintf(defaultStream::error_stream(), 2086 "TLABRefillWasteFraction should be a denominator, " 2087 "not " SIZE_FORMAT "\n", 2088 TLABRefillWasteFraction); 2089 status = false; 2090 } 2091 2092 status = status && verify_interval(AdaptiveSizePolicyWeight, 0, 100, 2093 "AdaptiveSizePolicyWeight"); 2094 status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance"); 2095 2096 // Divide by bucket size to prevent a large size from causing rollover when 2097 // calculating amount of memory needed to be allocated for the String table. 2098 status = status && verify_interval(StringTableSize, minimumStringTableSize, 2099 (max_uintx / StringTable::bucket_size()), "StringTable size"); 2100 2101 status = status && verify_interval(SymbolTableSize, minimumSymbolTableSize, 2102 (max_uintx / SymbolTable::bucket_size()), "SymbolTable size"); 2103 |