< prev index next >

src/share/vm/runtime/arguments.cpp

Print this page

        

*** 117,127 **** // Check if head of 'option' matches 'name', and sets 'tail' to the remaining // part of the option string. static bool match_option(const JavaVMOption *option, const char* name, const char** tail) { ! int len = (int)strlen(name); if (strncmp(option->optionString, name, len) == 0) { *tail = option->optionString + len; return true; } else { return false; --- 117,127 ---- // Check if head of 'option' matches 'name', and sets 'tail' to the remaining // part of the option string. static bool match_option(const JavaVMOption *option, const char* name, const char** tail) { ! size_t len = strlen(name); if (strncmp(option->optionString, name, len) == 0) { *tail = option->optionString + len; return true; } else { return false;
*** 218,311 **** // Update/Initialize System properties after JDK version number is known void Arguments::init_version_specific_system_properties() { enum { bufsz = 16 }; char buffer[bufsz]; ! const char* spec_vendor = "Sun Microsystems Inc."; ! uint32_t spec_version = 0; - spec_vendor = "Oracle Corporation"; - spec_version = JDK_Version::current().major_version(); jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version); PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.vendor", spec_vendor, false)); PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.version", buffer, false)); PropertyList_add(&_system_properties, new SystemProperty("java.vm.vendor", VM_Version::vm_vendor(), false)); } ! /** ! * Provide a slightly more user-friendly way of eliminating -XX flags. ! * When a flag is eliminated, it can be added to this list in order to ! * continue accepting this flag on the command-line, while issuing a warning ! * and ignoring the value. Once the JDK version reaches the 'accept_until' ! * limit, we flatly refuse to admit the existence of the flag. This allows ! * a flag to die correctly over JDK releases using HSX. ! * But now that HSX is no longer supported only options with a future ! * accept_until value need to be listed, and the list can be pruned ! * on each major release. */ typedef struct { const char* name; ! JDK_Version obsoleted_in; // when the flag went away ! JDK_Version accept_until; // which version to start denying the existence ! } ObsoleteFlag; ! ! static ObsoleteFlag obsolete_jvm_flags[] = { ! { "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "SafepointPollOffset", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseBoundThreads", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "DefaultThreadPriority", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NoYieldsInMicrolock", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "BackEdgeThreshold", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseNewReflection", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ReflectionWrapResolutionErrors",JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "VerifyReflectionBytecodes", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "AutoShutdownNMT", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NmethodSweepFraction", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NmethodSweepCheckInterval", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "CodeCacheMinimumFreeSpace", JDK_Version::jdk(9), JDK_Version::jdk(10) }, #ifndef ZERO ! { "UseFastAccessorMethods", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseFastEmptyMethods", JDK_Version::jdk(9), JDK_Version::jdk(10) }, #endif // ZERO ! { "UseCompilerSafepoints", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "AdaptiveSizePausePolicy", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ParallelGCRetainPLAB", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ThreadSafetyMargin", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "LazyBootClassLoader", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "StarvationMonitorInterval", JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "PreInflateSpin", JDK_Version::jdk(9), JDK_Version::jdk(10) }, { NULL, JDK_Version(0), JDK_Version(0) } }; ! // Returns true if the flag is obsolete and fits into the range specified ! // for being ignored. In the case that the flag is ignored, the 'version' ! // value is filled in with the version number when the flag became ! // obsolete so that that value can be displayed to the user. ! bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) { ! int i = 0; assert(version != NULL, "Must provide a version buffer"); ! while (obsolete_jvm_flags[i].name != NULL) { ! const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; ! // <flag>=xxx form ! // [-|+]<flag> form ! size_t len = strlen(flag_status.name); ! if ((strncmp(flag_status.name, s, len) == 0) && ! (strlen(s) == len)){ ! if (JDK_Version::current().compare(flag_status.accept_until) == -1) { ! *version = flag_status.obsoleted_in; return true; } } - i++; } return false; } // Constructs the system class path (aka boot class path) from the following // components, in order: // // prefix // from -Xbootclasspath/p:... // base // from os::get_system_properties() or -Xbootclasspath= --- 218,523 ---- // Update/Initialize System properties after JDK version number is known void Arguments::init_version_specific_system_properties() { enum { bufsz = 16 }; char buffer[bufsz]; ! const char* spec_vendor = "Oracle Corporation"; ! uint32_t spec_version = JDK_Version::current().major_version(); jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version); PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.vendor", spec_vendor, false)); PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.version", buffer, false)); PropertyList_add(&_system_properties, new SystemProperty("java.vm.vendor", VM_Version::vm_vendor(), false)); } ! /* ! * -XX argument processing: ! * ! * -XX arguments are defined in several places, such as: ! * globals.hpp, globals_<cpu>.hpp, globals_<os>.hpp, <compiler>_globals.hpp, or <gc>_globals.hpp. ! * -XX arguments are parsed in parse_argument(). ! * -XX argument bounds checking is done in check_vm_args_consistency(). ! * ! * Over time -XX arguments may change. There are mechanisms to handle common cases: ! * ! * ALIASED: An option that is simply another name for another option. This is often ! * part of the process of deprecating a flag, but not all aliases need ! * to be deprecated. ! * ! * Create an alias for an option by adding the old and new option names to the ! * "aliased_jvm_flags" table. Delete the old variable from globals.hpp (etc). ! * ! * DEPRECATED: An option that is supported, but a warning is printed to let the user know that ! * support may be removed in the future. Both regular and aliased options may be ! * deprecated. ! * ! * Add a deprecation warning for an option (or alias) by adding an entry in the ! * "special_jvm_flags" table and setting the "deprecated_in" field. ! * Often an option "deprecated" in one major release will ! * be made "obsolete" in the next. In this case the entry should also have it's ! * "obsolete_in" field set. ! * ! * OBSOLETE: An option that has been removed (and deleted from globals.hpp), but is still accepted ! * on the command line. A warning is printed to let the user know that option might not ! * be accepted in the future. ! * ! * Add an obsolete warning for an option by adding an entry in the "special_jvm_flags" ! * table and setting the "obsolete_in" field. ! * ! * EXPIRED: A deprecated or obsolete option that has an "accept_until" version less than or equal ! * to the current JDK version. The system will flatly refuse to admit the existence of ! * the flag. This allows a flag to die automatically over JDK releases. ! * ! * Note that manual cleanup of expired options should be done at major JDK version upgrades: ! * - Newly expired options should be removed from the special_jvm_flags and aliased_jvm_flags tables. ! * - Newly obsolete or expired deprecated options should have their global variable ! * definitions removed (from globals.hpp, etc) and related implementations removed. ! * ! * Recommended approach for removing options: ! * ! * To remove options commonly used by customers (e.g. product, commercial -XX options), use ! * the 3-step model adding major release numbers to the deprecate, obsolete and expire columns. ! * ! * To remove internal options (e.g. diagnostic, experimental, develop options), use ! * a 2-step model adding major release numbers to the obsolete and expire columns. ! * ! * To change the name of an option, use the alias table as well as a 2-step ! * model adding major release numbers to the deprecate and expire columns. ! * Think twice about aliasing commonly used customer options. ! * ! * There are times when it is appropriate to leave a future release number as undefined. ! * ! * Tests: Aliases should be tested in VMAliasOptions.java. ! * Deprecated options should be tested in VMDeprecatedOptions.java. */ + + // Obsolete or deprecated -XX flag. typedef struct { const char* name; ! JDK_Version deprecated_in; // When the deprecation warning started (or "undefined"). ! JDK_Version obsolete_in; // When the obsolete warning started (or "undefined"). ! JDK_Version expired_in; // When the option expires (or "undefined"). ! } SpecialFlag; ! ! // The special_jvm_flags table declares options that are being deprecated and/or obsoleted. The ! // "deprecated_in" or "obsolete_in" fields may be set to "undefined", but not both. ! // When the JDK version reaches 'deprecated_in' limit, the JVM will process this flag on ! // the command-line as usual, but will issue a warning. ! // When the JDK version reaches 'obsolete_in' limit, the JVM will continue accepting this flag on ! // the command-line, while issuing a warning and ignoring the flag value. ! // Once the JDK version reaches 'expired_in' limit, the JVM will flatly refuse to admit the ! // existence of the flag. ! // ! // MANUAL CLEANUP ON JDK VERSION UPDATES: ! // This table ensures that the handling of options will update automatically when the JDK ! // version is incremented, but the source code needs to be cleanup up manually: ! // - As "deprecated" options age into "obsolete" or "expired" options, the associated "globals" ! // variable should be removed, as well as users of the variable. ! // - As "deprecated" options age into "obsolete" options, move the entry into the ! // "Obsolete Flags" section of the table. ! // - All expired options should be removed from the table. ! static SpecialFlag const special_jvm_flags[] = { ! #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS ! { "dep > obs", JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() }, ! { "dep > exp ", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(8) }, ! { "obs > exp ", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(8) }, ! { "not deprecated or obsolete", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::undefined() }, ! { "dup option", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, ! { "dup option", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, ! { "BytecodeVerificationRemote", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::undefined() }, ! #endif ! ! // -------------- Deprecated Flags -------------- ! // --- Non-alias flags - sorted by obsolete_in then expired_in: ! { "MaxGCMinorPauseMillis", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, ! { "UseParNewGC", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! ! // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: ! { "DefaultMaxRAMFraction", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, ! { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, ! { "CMSMarkStackSizeMax", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! { "CMSMarkStackSize", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! { "G1MarkStackSize", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! { "ParallelMarkingThreads", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! { "ParallelCMSThreads", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, ! ! // -------------- Obsolete Flags - sorted by expired_in -------------- ! { "UseOldInlining", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "SafepointPollOffset", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseBoundThreads", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "DefaultThreadPriority", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NoYieldsInMicrolock", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "BackEdgeThreshold", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseNewReflection", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ReflectionWrapResolutionErrors",JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "VerifyReflectionBytecodes", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "AutoShutdownNMT", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NmethodSweepFraction", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "NmethodSweepCheckInterval", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "CodeCacheMinimumFreeSpace", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, #ifndef ZERO ! { "UseFastAccessorMethods", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "UseFastEmptyMethods", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, #endif // ZERO ! { "UseCompilerSafepoints", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "AdaptiveSizePausePolicy", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ParallelGCRetainPLAB", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "ThreadSafetyMargin", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "LazyBootClassLoader", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "StarvationMonitorInterval", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, ! { "PreInflateSpin", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, { NULL, JDK_Version(0), JDK_Version(0) } }; ! // Flags that are aliases for other flags. ! typedef struct { ! const char* alias_name; ! const char* real_name; ! } AliasedFlag; ! ! static AliasedFlag const aliased_jvm_flags[] = { ! { "DefaultMaxRAMFraction", "MaxRAMFraction" }, ! { "CMSMarkStackSizeMax", "MarkStackSizeMax" }, ! { "CMSMarkStackSize", "MarkStackSize" }, ! { "G1MarkStackSize", "MarkStackSize" }, ! { "ParallelMarkingThreads", "ConcGCThreads" }, ! { "ParallelCMSThreads", "ConcGCThreads" }, ! { "CreateMinidumpOnCrash", "CreateCoredumpOnCrash" }, ! { NULL, NULL} ! }; ! ! // Return true if "v" is less than "other", where "other" may be "undefined". ! static bool version_less_than(JDK_Version v, JDK_Version other) { ! assert(!v.is_undefined(), "must be defined"); ! if (!other.is_undefined() && v.compare(other) >= 0) { ! return false; ! } else { ! return true; ! } ! } ! ! static bool lookup_special_flag(const char *flag_name, SpecialFlag& flag) { ! for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { ! if ((strcmp(special_jvm_flags[i].name, flag_name) == 0)) { ! flag = special_jvm_flags[i]; ! return true; ! } ! } ! return false; ! } ! ! bool Arguments::is_obsolete_flag(const char *flag_name, JDK_Version* version) { assert(version != NULL, "Must provide a version buffer"); ! SpecialFlag flag; ! if (lookup_special_flag(flag_name, flag)) { ! if (!flag.obsolete_in.is_undefined()) { ! if (version_less_than(JDK_Version::current(), flag.expired_in)) { ! *version = flag.obsolete_in; return true; } } } return false; } + int Arguments::is_deprecated_flag(const char *flag_name, JDK_Version* version) { + assert(version != NULL, "Must provide a version buffer"); + SpecialFlag flag; + if (lookup_special_flag(flag_name, flag)) { + if (!flag.deprecated_in.is_undefined()) { + if (version_less_than(JDK_Version::current(), flag.obsolete_in) && + version_less_than(JDK_Version::current(), flag.expired_in)) { + *version = flag.deprecated_in; + return 1; + } else { + return -1; + } + } + } + return 0; + } + + const char* Arguments::real_flag_name(const char *flag_name) { + for (size_t i = 0; aliased_jvm_flags[i].alias_name != NULL; i++) { + const AliasedFlag& flag_status = aliased_jvm_flags[i]; + if (strcmp(flag_status.alias_name, flag_name) == 0) { + return flag_status.real_name; + } + } + return flag_name; + } + + #ifndef PRODUCT + static bool lookup_special_flag(const char *flag_name, size_t skip_index) { + for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { + if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) { + return true; + } + } + return false; + } + + static bool verify_special_jvm_flags() { + bool success = true; + for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { + const SpecialFlag& flag = special_jvm_flags[i]; + if (lookup_special_flag(flag.name, i)) { + warning("Duplicate special flag declaration \"%s\"", flag.name); + success = false; + } + if (flag.deprecated_in.is_undefined() && + flag.obsolete_in.is_undefined()) { + warning("Special flag entry \"%s\" must declare version deprecated and/or obsoleted in.", flag.name); + success = false; + } + + if (!flag.deprecated_in.is_undefined()) { + if (!version_less_than(flag.deprecated_in, flag.obsolete_in)) { + warning("Special flag entry \"%s\" must be deprecated before obsoleted.", flag.name); + success = false; + } + + if (!version_less_than(flag.deprecated_in, flag.expired_in)) { + warning("Special flag entry \"%s\" must be deprecated before expired.", flag.name); + success = false; + } + } + + if (!flag.obsolete_in.is_undefined()) { + if (!version_less_than(flag.obsolete_in, flag.expired_in)) { + warning("Special flag entry \"%s\" must be obsoleted before expired.", flag.name); + success = false; + } + + // if flag has become obsolete it should not have a "globals" flag defined anymore. + if (!version_less_than(JDK_Version::current(), flag.obsolete_in)) { + if (Flag::find_flag(flag.name) != NULL) { + warning("Global variable for obsolete special flag entry \"%s\" should be removed", flag.name); + success = false; + } + } + } + + if (!flag.expired_in.is_undefined()) { + // if flag has become expired it should not have a "globals" flag defined anymore. + if (!version_less_than(JDK_Version::current(), flag.expired_in)) { + if (Flag::find_flag(flag.name) != NULL) { + warning("Global variable for expired flag entry \"%s\" should be removed", flag.name); + success = false; + } + } + } + + } + return success; + } + #endif + // Constructs the system class path (aka boot class path) from the following // components, in order: // // prefix // from -Xbootclasspath/p:... // base // from os::get_system_properties() or -Xbootclasspath=
*** 570,588 **** default: ShouldNotReachHere(); } } ! static bool set_bool_flag(char* name, bool value, Flag::Flags origin) { if (CommandLineFlags::boolAtPut(name, &value, origin) == Flag::SUCCESS) { return true; } else { return false; } } ! static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) { double v; if (sscanf(value, "%lf", &v) != 1) { return false; } --- 782,800 ---- default: ShouldNotReachHere(); } } ! static bool set_bool_flag(const char* name, bool value, Flag::Flags origin) { if (CommandLineFlags::boolAtPut(name, &value, origin) == Flag::SUCCESS) { return true; } else { return false; } } ! static bool set_fp_numeric_flag(const char* name, char* value, Flag::Flags origin) { double v; if (sscanf(value, "%lf", &v) != 1) { return false; }
*** 590,600 **** return true; } return false; } ! static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) { julong v; int int_v; intx intx_v; bool is_neg = false; // Check the sign first since atomull() parses only unsigned values. --- 802,812 ---- return true; } return false; } ! static bool set_numeric_flag(const char* name, char* value, Flag::Flags origin) { julong v; int int_v; intx intx_v; bool is_neg = false; // Check the sign first since atomull() parses only unsigned values.
*** 639,656 **** return true; } return false; } ! static bool set_string_flag(char* name, const char* value, Flag::Flags origin) { if (CommandLineFlags::ccstrAtPut(name, &value, origin) != Flag::SUCCESS) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. FREE_C_HEAP_ARRAY(char, value); return true; } ! static bool append_to_string_flag(char* name, const char* new_value, Flag::Flags origin) { const char* old_value = ""; if (CommandLineFlags::ccstrAt(name, &old_value) != Flag::SUCCESS) return false; size_t old_len = old_value != NULL ? strlen(old_value) : 0; size_t new_len = strlen(new_value); const char* value; --- 851,868 ---- return true; } return false; } ! static bool set_string_flag(const char* name, const char* value, Flag::Flags origin) { if (CommandLineFlags::ccstrAtPut(name, &value, origin) != Flag::SUCCESS) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. FREE_C_HEAP_ARRAY(char, value); return true; } ! static bool append_to_string_flag(const char* name, const char* new_value, Flag::Flags origin) { const char* old_value = ""; if (CommandLineFlags::ccstrAt(name, &old_value) != Flag::SUCCESS) return false; size_t old_len = old_value != NULL ? strlen(old_value) : 0; size_t new_len = strlen(new_value); const char* value;
*** 674,738 **** FREE_C_HEAP_ARRAY(char, free_this_too); } return true; } bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { // range of acceptable characters spelled out for portability reasons #define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]" #define BUFLEN 255 char name[BUFLEN+1]; char dummy; if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { ! return set_bool_flag(name, false, origin); } if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { ! return set_bool_flag(name, true, origin); } char punct; if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') { const char* value = strchr(arg, '=') + 1; ! Flag* flag = Flag::find_flag(name, strlen(name)); if (flag != NULL && flag->is_ccstr()) { if (flag->ccstr_accumulates()) { ! return append_to_string_flag(name, value, origin); } else { if (value[0] == '\0') { value = NULL; } ! return set_string_flag(name, value, origin); } } } if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE ":%c", name, &punct) == 2 && punct == '=') { const char* value = strchr(arg, '=') + 1; // -XX:Foo:=xxx will reset the string flag to the given value. if (value[0] == '\0') { value = NULL; } ! return set_string_flag(name, value, origin); } #define SIGNED_FP_NUMBER_RANGE "[-0123456789.]" #define SIGNED_NUMBER_RANGE "[-0123456789]" #define NUMBER_RANGE "[0123456789]" char value[BUFLEN + 1]; char value2[BUFLEN + 1]; if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_NUMBER_RANGE "." "%" XSTR(BUFLEN) NUMBER_RANGE "%c", name, value, value2, &dummy) == 3) { // Looks like a floating-point number -- try again with more lenient format string if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_FP_NUMBER_RANGE "%c", name, value, &dummy) == 2) { ! return set_fp_numeric_flag(name, value, origin); } } #define VALUE_RANGE "[-kmgtxKMGTX0123456789abcdefABCDEF]" if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) VALUE_RANGE "%c", name, value, &dummy) == 2) { ! return set_numeric_flag(name, value, origin); } return false; } --- 886,1008 ---- FREE_C_HEAP_ARRAY(char, free_this_too); } return true; } + const char* Arguments::handle_aliases_and_deprecation(const char* arg, bool warn) { + const char* real_name = real_flag_name(arg); + JDK_Version since = JDK_Version(); + switch (is_deprecated_flag(arg, &since)) { + case -1: + return NULL; // obsolete or expired, don't process normally + case 0: + return real_name; + case 1: { + if (warn) { + char version[256]; + since.to_string(version, sizeof(version)); + if (real_name != arg) { + warning("Option %s was deprecated in version %s and will likely be removed in a future release. Use option %s instead.", + arg, version, real_name); + } else { + warning("Option %s was deprecated in version %s and will likely be removed in a future release.", + arg, version); + } + } + return real_name; + } + } + ShouldNotReachHere(); + return NULL; + } + bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { // range of acceptable characters spelled out for portability reasons #define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]" #define BUFLEN 255 char name[BUFLEN+1]; char dummy; + const char* real_name; + bool warn_if_deprecated = true; if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! return set_bool_flag(real_name, false, origin); } if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! return set_bool_flag(real_name, true, origin); } char punct; if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') { const char* value = strchr(arg, '=') + 1; ! Flag* flag; ! ! // this scanf pattern matches both strings (handled here) and numbers (handled later)) ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! flag = Flag::find_flag(real_name); if (flag != NULL && flag->is_ccstr()) { if (flag->ccstr_accumulates()) { ! return append_to_string_flag(real_name, value, origin); } else { if (value[0] == '\0') { value = NULL; } ! return set_string_flag(real_name, value, origin); } + } else { + warn_if_deprecated = false; // if arg is deprecated, we've already done warning... } } if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE ":%c", name, &punct) == 2 && punct == '=') { const char* value = strchr(arg, '=') + 1; // -XX:Foo:=xxx will reset the string flag to the given value. if (value[0] == '\0') { value = NULL; } ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! return set_string_flag(real_name, value, origin); } #define SIGNED_FP_NUMBER_RANGE "[-0123456789.]" #define SIGNED_NUMBER_RANGE "[-0123456789]" #define NUMBER_RANGE "[0123456789]" char value[BUFLEN + 1]; char value2[BUFLEN + 1]; if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_NUMBER_RANGE "." "%" XSTR(BUFLEN) NUMBER_RANGE "%c", name, value, value2, &dummy) == 3) { // Looks like a floating-point number -- try again with more lenient format string if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_FP_NUMBER_RANGE "%c", name, value, &dummy) == 2) { ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! return set_fp_numeric_flag(real_name, value, origin); } } #define VALUE_RANGE "[-kmgtxKMGTX0123456789abcdefABCDEF]" if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) VALUE_RANGE "%c", name, value, &dummy) == 2) { ! real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); ! if (real_name == NULL) { ! return false; ! } ! return set_numeric_flag(real_name, value, origin); } return false; }
*** 836,847 **** } } } bool Arguments::process_argument(const char* arg, ! jboolean ignore_unrecognized, Flag::Flags origin) { ! JDK_Version since = JDK_Version(); if (parse_argument(arg, origin) || ignore_unrecognized) { return true; } --- 1106,1117 ---- } } } bool Arguments::process_argument(const char* arg, ! jboolean ignore_unrecognized, ! Flag::Flags origin) { JDK_Version since = JDK_Version(); if (parse_argument(arg, origin) || ignore_unrecognized) { return true; }
*** 863,876 **** // Construct a string which consists only of the argument name without '+', '-', or '='. char stripped_argname[BUFLEN+1]; strncpy(stripped_argname, argname, arg_len); stripped_argname[arg_len] = '\0'; // strncpy may not null terminate. ! if (is_newly_obsolete(stripped_argname, &since)) { char version[256]; since.to_string(version, sizeof(version)); ! warning("ignoring option %s; support was removed in %s", stripped_argname, version); return true; } } // For locked flags, report a custom error message if available. --- 1133,1146 ---- // Construct a string which consists only of the argument name without '+', '-', or '='. char stripped_argname[BUFLEN+1]; strncpy(stripped_argname, argname, arg_len); stripped_argname[arg_len] = '\0'; // strncpy may not null terminate. ! if (is_obsolete_flag(stripped_argname, &since)) { char version[256]; since.to_string(version, sizeof(version)); ! warning("Ignoring option %s; support was removed in %s", stripped_argname, version); return true; } } // For locked flags, report a custom error message if available.
*** 1226,1236 **** #if INCLUDE_ALL_GCS static void disable_adaptive_size_policy(const char* collector_name) { if (UseAdaptiveSizePolicy) { if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { ! warning("disabling UseAdaptiveSizePolicy; it is incompatible with %s.", collector_name); } FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); } } --- 1496,1506 ---- #if INCLUDE_ALL_GCS static void disable_adaptive_size_policy(const char* collector_name) { if (UseAdaptiveSizePolicy) { if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { ! warning("Disabling UseAdaptiveSizePolicy; it is incompatible with %s.", collector_name); } FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); } }
*** 1701,1711 **** } else if (UseConcMarkSweepGC) { set_cms_and_parnew_gc_flags(); } else if (UseG1GC) { set_g1_gc_flags(); } - check_deprecated_gc_flags(); if (AssumeMP && !UseSerialGC) { if (FLAG_IS_DEFAULT(ParallelGCThreads) && ParallelGCThreads == 1) { warning("If the number of processors is expected to increase from one, then" " you should configure the number of parallel GC threads appropriately" " using -XX:ParallelGCThreads=N"); --- 1971,1980 ----
*** 1731,1745 **** // Use static initialization to get the default before parsing static const size_t DefaultHeapBaseMinAddress = HeapBaseMinAddress; void Arguments::set_heap_size() { - if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) { - // Deprecated flag - FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction); - } - const julong phys_mem = FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM) : (julong)MaxRAM; // If the maximum heap size has not been set with -Xmx, --- 2000,2009 ----
*** 1838,1848 **** } } } } ! // Set up runtime image flags void Arguments::set_runtime_image_flags() { #ifdef _LP64 // Memory map image file by default on 64 bit machines. if (FLAG_IS_DEFAULT(MemoryMapImage)) { FLAG_SET_ERGO(bool, MemoryMapImage, true); --- 2102,2228 ---- } } } } ! // This option inspects the machine and attempts to set various ! // parameters to be optimal for long-running, memory allocation ! // intensive jobs. It is intended for machines with large ! // amounts of cpu and memory. ! jint Arguments::set_aggressive_heap_flags() { ! // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit ! // VM, but we may not be able to represent the total physical memory ! // available (like having 8gb of memory on a box but using a 32bit VM). ! // Thus, we need to make sure we're using a julong for intermediate ! // calculations. ! julong initHeapSize; ! julong total_memory = os::physical_memory(); ! ! if (total_memory < (julong) 256 * M) { ! jio_fprintf(defaultStream::error_stream(), ! "You need at least 256mb of memory to use -XX:+AggressiveHeap\n"); ! vm_exit(1); ! } ! ! // The heap size is half of available memory, or (at most) ! // all of possible memory less 160mb (leaving room for the OS ! // when using ISM). This is the maximum; because adaptive sizing ! // is turned on below, the actual space used may be smaller. ! ! initHeapSize = MIN2(total_memory / (julong) 2, ! total_memory - (julong) 160 * M); ! ! initHeapSize = limit_by_allocatable_memory(initHeapSize); ! ! if (FLAG_IS_DEFAULT(MaxHeapSize)) { ! if (FLAG_SET_CMDLINE(size_t, MaxHeapSize, initHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, InitialHeapSize, initHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! // Currently the minimum size and the initial heap sizes are the same. ! set_min_heap_size(initHeapSize); ! } ! if (FLAG_IS_DEFAULT(NewSize)) { ! // Make the young generation 3/8ths of the total heap. ! if (FLAG_SET_CMDLINE(size_t, NewSize, ! ((julong) MaxHeapSize / (julong) 8) * (julong) 3) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, MaxNewSize, NewSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! } ! ! #if !defined(_ALLBSD_SOURCE) && !defined(AIX) // UseLargePages is not yet supported on BSD and AIX. ! FLAG_SET_DEFAULT(UseLargePages, true); ! #endif ! ! // Increase some data structure sizes for efficiency ! if (FLAG_SET_CMDLINE(size_t, BaseFootPrintEstimate, MaxHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(bool, ResizeTLAB, false) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, TLABSize, 256 * K) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // See the OldPLABSize comment below, but replace 'after promotion' ! // with 'after copying'. YoungPLABSize is the size of the survivor ! // space per-gc-thread buffers. The default is 4kw. ! if (FLAG_SET_CMDLINE(size_t, YoungPLABSize, 256 * K) != Flag::SUCCESS) { // Note: this is in words ! return JNI_EINVAL; ! } ! ! // OldPLABSize is the size of the buffers in the old gen that ! // UseParallelGC uses to promote live data that doesn't fit in the ! // survivor spaces. At any given time, there's one for each gc thread. ! // The default size is 1kw. These buffers are rarely used, since the ! // survivor spaces are usually big enough. For specjbb, however, there ! // are occasions when there's lots of live data in the young gen ! // and we end up promoting some of it. We don't have a definite ! // explanation for why bumping OldPLABSize helps, but the theory ! // is that a bigger PLAB results in retaining something like the ! // original allocation order after promotion, which improves mutator ! // locality. A minor effect may be that larger PLABs reduce the ! // number of PLAB allocation events during gc. The value of 8kw ! // was arrived at by experimenting with specjbb. ! if (FLAG_SET_CMDLINE(size_t, OldPLABSize, 8 * K) != Flag::SUCCESS) { // Note: this is in words ! return JNI_EINVAL; ! } ! ! // Enable parallel GC and adaptive generation sizing ! if (FLAG_SET_CMDLINE(bool, UseParallelGC, true) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! FLAG_SET_DEFAULT(ParallelGCThreads, ! Abstract_VM_Version::parallel_worker_threads()); ! ! // Encourage steady state memory management ! if (FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // This appears to improve mutator locality ! if (FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // Get around early Solaris scheduling bug ! // (affinity vs other jobs on system) ! // but disallow DR and offlining (5008695). ! if (FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! return JNI_OK; ! } ! ! // Set up runtime image flags void Arguments::set_runtime_image_flags() { #ifdef _LP64 // Memory map image file by default on 64 bit machines. if (FLAG_IS_DEFAULT(MemoryMapImage)) { FLAG_SET_ERGO(bool, MemoryMapImage, true);
*** 2027,2050 **** } return true; } - void Arguments::check_deprecated_gc_flags() { - if (FLAG_IS_CMDLINE(UseParNewGC)) { - warning("The UseParNewGC flag is deprecated and will likely be removed in a future release"); - } - if (FLAG_IS_CMDLINE(MaxGCMinorPauseMillis)) { - warning("Using MaxGCMinorPauseMillis as minor pause goal is deprecated" - "and will likely be removed in future release"); - } - if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) { - warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. " - "Use MaxRAMFraction instead."); - } - } - // Check the consistency of vm_init_args bool Arguments::check_vm_args_consistency() { // Method for adding checks for flag consistency. // The intent is to warn the user of all possible conflicts, // before returning an error. --- 2407,2416 ----
*** 2576,2586 **** match_option(option, "-Xoptimize") || match_option(option, "-Xboundthreads")) { // All these options are deprecated in JDK 9 and will be removed in a future release char version[256]; JDK_Version::jdk(9).to_string(version, sizeof(version)); ! warning("ignoring option %s; support was removed in %s", option->optionString, version); } else if (match_option(option, "-XX:CodeCacheExpansionSize=", &tail)) { julong long_CodeCacheExpansionSize = 0; ArgsRange errcode = parse_memory_size(tail, &long_CodeCacheExpansionSize, os::vm_page_size()); if (errcode != arg_in_range) { jio_fprintf(defaultStream::error_stream(), --- 2942,2952 ---- match_option(option, "-Xoptimize") || match_option(option, "-Xboundthreads")) { // All these options are deprecated in JDK 9 and will be removed in a future release char version[256]; JDK_Version::jdk(9).to_string(version, sizeof(version)); ! warning("Ignoring option %s; support was removed in %s", option->optionString, version); } else if (match_option(option, "-XX:CodeCacheExpansionSize=", &tail)) { julong long_CodeCacheExpansionSize = 0; ArgsRange errcode = parse_memory_size(tail, &long_CodeCacheExpansionSize, os::vm_page_size()); if (errcode != arg_in_range) { jio_fprintf(defaultStream::error_stream(),
*** 2843,2966 **** _exit_hook = CAST_TO_FN_PTR(exit_hook_t, option->extraInfo); } else if (match_option(option, "abort")) { _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo); // -XX:+AggressiveHeap } else if (match_option(option, "-XX:+AggressiveHeap")) { ! ! // This option inspects the machine and attempts to set various ! // parameters to be optimal for long-running, memory allocation ! // intensive jobs. It is intended for machines with large ! // amounts of cpu and memory. ! ! // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit ! // VM, but we may not be able to represent the total physical memory ! // available (like having 8gb of memory on a box but using a 32bit VM). ! // Thus, we need to make sure we're using a julong for intermediate ! // calculations. ! julong initHeapSize; ! julong total_memory = os::physical_memory(); ! ! if (total_memory < (julong)256*M) { ! jio_fprintf(defaultStream::error_stream(), ! "You need at least 256mb of memory to use -XX:+AggressiveHeap\n"); ! vm_exit(1); ! } ! ! // The heap size is half of available memory, or (at most) ! // all of possible memory less 160mb (leaving room for the OS ! // when using ISM). This is the maximum; because adaptive sizing ! // is turned on below, the actual space used may be smaller. ! ! initHeapSize = MIN2(total_memory / (julong)2, ! total_memory - (julong)160*M); ! ! initHeapSize = limit_by_allocatable_memory(initHeapSize); ! ! if (FLAG_IS_DEFAULT(MaxHeapSize)) { ! if (FLAG_SET_CMDLINE(size_t, MaxHeapSize, initHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, InitialHeapSize, initHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! // Currently the minimum size and the initial heap sizes are the same. ! set_min_heap_size(initHeapSize); ! } ! if (FLAG_IS_DEFAULT(NewSize)) { ! // Make the young generation 3/8ths of the total heap. ! if (FLAG_SET_CMDLINE(size_t, NewSize, ! ((julong)MaxHeapSize / (julong)8) * (julong)3) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, MaxNewSize, NewSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! } ! ! #if !defined(_ALLBSD_SOURCE) && !defined(AIX) // UseLargePages is not yet supported on BSD and AIX. ! FLAG_SET_DEFAULT(UseLargePages, true); ! #endif ! ! // Increase some data structure sizes for efficiency ! if (FLAG_SET_CMDLINE(size_t, BaseFootPrintEstimate, MaxHeapSize) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(bool, ResizeTLAB, false) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! if (FLAG_SET_CMDLINE(size_t, TLABSize, 256*K) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // See the OldPLABSize comment below, but replace 'after promotion' ! // with 'after copying'. YoungPLABSize is the size of the survivor ! // space per-gc-thread buffers. The default is 4kw. ! if (FLAG_SET_CMDLINE(size_t, YoungPLABSize, 256*K) != Flag::SUCCESS) { // Note: this is in words ! return JNI_EINVAL; ! } ! ! // OldPLABSize is the size of the buffers in the old gen that ! // UseParallelGC uses to promote live data that doesn't fit in the ! // survivor spaces. At any given time, there's one for each gc thread. ! // The default size is 1kw. These buffers are rarely used, since the ! // survivor spaces are usually big enough. For specjbb, however, there ! // are occasions when there's lots of live data in the young gen ! // and we end up promoting some of it. We don't have a definite ! // explanation for why bumping OldPLABSize helps, but the theory ! // is that a bigger PLAB results in retaining something like the ! // original allocation order after promotion, which improves mutator ! // locality. A minor effect may be that larger PLABs reduce the ! // number of PLAB allocation events during gc. The value of 8kw ! // was arrived at by experimenting with specjbb. ! if (FLAG_SET_CMDLINE(size_t, OldPLABSize, 8*K) != Flag::SUCCESS) { // Note: this is in words ! return JNI_EINVAL; ! } ! ! // Enable parallel GC and adaptive generation sizing ! if (FLAG_SET_CMDLINE(bool, UseParallelGC, true) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! FLAG_SET_DEFAULT(ParallelGCThreads, ! Abstract_VM_Version::parallel_worker_threads()); ! ! // Encourage steady state memory management ! if (FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // This appears to improve mutator locality ! if (FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false) != Flag::SUCCESS) { ! return JNI_EINVAL; ! } ! ! // Get around early Solaris scheduling bug ! // (affinity vs other jobs on system) ! // but disallow DR and offlining (5008695). ! if (FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true) != Flag::SUCCESS) { ! return JNI_EINVAL; } - // Need to keep consistency of MaxTenuringThreshold and AlwaysTenure/NeverTenure; // and the last option wins. } else if (match_option(option, "-XX:+NeverTenure")) { if (FLAG_SET_CMDLINE(bool, NeverTenure, true) != Flag::SUCCESS) { return JNI_EINVAL; --- 3209,3222 ---- _exit_hook = CAST_TO_FN_PTR(exit_hook_t, option->extraInfo); } else if (match_option(option, "abort")) { _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo); // -XX:+AggressiveHeap } else if (match_option(option, "-XX:+AggressiveHeap")) { ! jint result = set_aggressive_heap_flags(); ! if (result != JNI_OK) { ! return result; } // Need to keep consistency of MaxTenuringThreshold and AlwaysTenure/NeverTenure; // and the last option wins. } else if (match_option(option, "-XX:+NeverTenure")) { if (FLAG_SET_CMDLINE(bool, NeverTenure, true) != Flag::SUCCESS) { return JNI_EINVAL;
*** 3049,3104 **** // disable scavenge before parallel mark-compact if (FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false) != Flag::SUCCESS) { return JNI_EINVAL; } #endif - } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) || - match_option(option, "-XX:G1MarkStackSize=", &tail)) { - julong stack_size = 0; - ArgsRange errcode = parse_memory_size(tail, &stack_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid mark stack size: %s\n", option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:MarkStackSize in place of " - "-XX:CMSMarkStackSize or -XX:G1MarkStackSize in the future\n"); - if (FLAG_SET_CMDLINE(size_t, MarkStackSize, stack_size) != Flag::SUCCESS) { - return JNI_EINVAL; - } - } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) { - julong max_stack_size = 0; - ArgsRange errcode = parse_memory_size(tail, &max_stack_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid maximum mark stack size: %s\n", - option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:MarkStackSizeMax in place of " - "-XX:CMSMarkStackSizeMax in the future\n"); - if (FLAG_SET_CMDLINE(size_t, MarkStackSizeMax, max_stack_size) != Flag::SUCCESS) { - return JNI_EINVAL; - } - } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) || - match_option(option, "-XX:ParallelCMSThreads=", &tail)) { - uintx conc_threads = 0; - if (!parse_uintx(tail, &conc_threads, 1)) { - jio_fprintf(defaultStream::error_stream(), - "Invalid concurrent threads: %s\n", option->optionString); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:ConcGCThreads in place of " - "-XX:ParallelMarkingThreads or -XX:ParallelCMSThreads in the future\n"); - if (FLAG_SET_CMDLINE(uint, ConcGCThreads, conc_threads) != Flag::SUCCESS) { - return JNI_EINVAL; - } } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { julong max_direct_memory_size = 0; ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0); if (errcode != arg_in_range) { jio_fprintf(defaultStream::error_stream(), --- 3305,3314 ----
*** 3114,3136 **** } else if (match_option(option, "-XX:+ManagementServer")) { jio_fprintf(defaultStream::error_stream(), "ManagementServer is not supported in this VM.\n"); return JNI_ERR; #endif // INCLUDE_MANAGEMENT - // CreateMinidumpOnCrash is removed, and replaced by CreateCoredumpOnCrash - } else if (match_option(option, "-XX:+CreateMinidumpOnCrash")) { - if (FLAG_SET_CMDLINE(bool, CreateCoredumpOnCrash, true) != Flag::SUCCESS) { - return JNI_EINVAL; - } - jio_fprintf(defaultStream::output_stream(), - "CreateMinidumpOnCrash is replaced by CreateCoredumpOnCrash: CreateCoredumpOnCrash is on\n"); - } else if (match_option(option, "-XX:-CreateMinidumpOnCrash")) { - if (FLAG_SET_CMDLINE(bool, CreateCoredumpOnCrash, false) != Flag::SUCCESS) { - return JNI_EINVAL; - } - jio_fprintf(defaultStream::output_stream(), - "CreateMinidumpOnCrash is replaced by CreateCoredumpOnCrash: CreateCoredumpOnCrash is off\n"); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= since that case has already been handled if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { if (!process_argument(tail, args->ignoreUnrecognized, origin)) { return JNI_EINVAL; --- 3324,3333 ----
*** 3505,3515 **** } void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) { ! warning("cannot dump shared archive while using shared archive"); } UseSharedSpaces = false; #ifdef _LP64 if (!UseCompressedOops || !UseCompressedClassPointers) { vm_exit_during_initialization( --- 3702,3712 ---- } void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) { ! warning("Cannot dump shared archive while using shared archive"); } UseSharedSpaces = false; #ifdef _LP64 if (!UseCompressedOops || !UseCompressedClassPointers) { vm_exit_during_initialization(
*** 3663,3672 **** --- 3860,3870 ---- } // Parse entry point called from JNI_CreateJavaVM jint Arguments::parse(const JavaVMInitArgs* args) { + assert(verify_special_jvm_flags(), "deprecated and obsolete flag table inconsistent"); // Initialize ranges and constraints CommandLineFlagRangeList::init(); CommandLineFlagConstraintList::init();
*** 3784,3794 **** } #endif // PRODUCT if (ScavengeRootsInCode == 0) { if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) { ! warning("forcing ScavengeRootsInCode non-zero"); } ScavengeRootsInCode = 1; } if (PrintGCDetails) { --- 3982,3992 ---- } #endif // PRODUCT if (ScavengeRootsInCode == 0) { if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) { ! warning("Forcing ScavengeRootsInCode non-zero"); } ScavengeRootsInCode = 1; } if (PrintGCDetails) {
< prev index next >