--- old/src/share/vm/runtime/arguments.cpp 2015-07-17 12:25:47.745270226 -0400 +++ new/src/share/vm/runtime/arguments.cpp 2015-07-17 12:25:47.604271988 -0400 @@ -121,7 +121,7 @@ // part of the option string. static bool match_option(const JavaVMOption *option, const char* name, const char** tail) { - int len = (int)strlen(name); + size_t len = strlen(name); if (strncmp(option->optionString, name, len) == 0) { *tail = option->optionString + len; return true; @@ -222,11 +222,9 @@ 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; + const char* spec_vendor = "Oracle Corporation"; + uint32_t spec_version = JDK_Version::current().major_version(); - spec_vendor = "Oracle Corporation"; - spec_version = JDK_Version::current().major_version(); jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version); PropertyList_add(&_system_properties, @@ -237,24 +235,61 @@ 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. +/* + * -XX argument processing: + * + * -XX arguments are defined in several places, such as: + * globals.hpp, globals_.hpp, globals_.hpp, _globals.hpp, or _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: + * + * ALIAS: An option may be renamed or replaced by another option. The old name can be supported by + * adding the old and new option names to the "aliased_jvm_flags" table. Delete the old + * variable from globals.hpp. This is often part of the process of deprecating a flag, but + * not all aliases need to be deprecated. + * + * DEPRECATED: An option may be 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 + * "deprecated_jvm_flags" table. Specify the option name, the jdk version that deprecated the + * option, and the jdk version that will expire the option (use "undefined()" if removal has + * been not scheduled). + * + * OBSOLETE: An option may be removed (and deleted from globals.hpp), but still be accepted on the command + * line. A warning is printed to let the user know that support may be removed in the future. + * Add an obsolete warning for an option (or alias) by adding an entry in the + * "obsolete_jvm_flags" table. Specify the option name, the jdk version that obsoleted the option, + * and the jdk version that will expire the option (use "undefined()" if removal has been not + * scheduled). + * + * EXPIRED: When the current JDK version is equal or greater to the "accept_until" version of a deprecated + * or obsolete option, the system will flatly refuse to admit the existence of the flag. This + * allows a flag to die correctly over JDK releases. + * Note that manual cleanup of expired options should be done at major JDK version upgrades: + * - Expired options can be removed from the obsolete_jvm_flags, deprecated_jvm_flags tables, + * and aliased_jvm_flags tables. + * - Removed options may have global variable definitions that should also be + * removed (in globals.hpp, etc). + * + * Tests: Aliases are tested in VMAliasOptions.java. + * Deprecated options are tested in VMDeprecatedOptions.java. + * Obsolete options are tested in various files. */ + +// Obsolete or deprecated -XX flag. 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[] = { + JDK_Version obsoleted_in; // When the warning started (obsolete or deprecated). + JDK_Version accept_until; // Which version to start denying the existence of the flag (if scheduled). +} SpecialFlag; + +// 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. +static SpecialFlag const 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) }, @@ -282,28 +317,80 @@ { 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; +// When a flag is deprecated, it can be added to this list in order to issuing a warning when the flag is used. +// Once the JDK version reaches the 'accept_until' limit, we flatly refuse to admit the existence of the flag. +static SpecialFlag const deprecated_jvm_flags[] = { + // deprecated non-alias flags: + { "MaxGCMinorPauseMillis", JDK_Version::jdk(8), JDK_Version::undefined() }, + { "UseParNewGC", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + + // deprecated alias flags (see also aliased_jvm_flags): + { "DefaultMaxRAMFraction", JDK_Version::jdk(8), JDK_Version::undefined() }, + { "CMSMarkStackSizeMax", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "CMSMarkStackSize", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "G1MarkStackSize", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "ParallelMarkingThreads", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "ParallelCMSThreads", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined() }, + { 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} +}; + +// Returns 1 if the flag is special and jdk version is in the range specified. +// In this case the 'version' buffer is filled in with the version number when +// the flag became special. +// Returns -1 if the flag is special and has expired (should be ignored). +// Returns 0 if the flag is not special. +// Flag "flag_name" is a flag name stripped of '+', '-', and '='. +static int is_special_flag(const SpecialFlag special_table[], const char *flag_name, JDK_Version* version) { assert(version != NULL, "Must provide a version buffer"); - while (obsolete_jvm_flags[i].name != NULL) { - const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; - // =xxx form - // [-|+] 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; + for (size_t i = 0; special_table[i].name != NULL; i++) { + const SpecialFlag& flag_status = special_table[i]; + if ((strcmp(flag_status.name, flag_name) == 0)) { + if (flag_status.accept_until.is_undefined() || + JDK_Version::current().compare(flag_status.accept_until) == -1) { + *version = flag_status.obsoleted_in; + return 1; + } else { + return -1; } } - i++; } - return false; + return 0; +} + +bool Arguments::is_newly_obsolete(const char *flag_name, JDK_Version* version) { + return (is_special_flag(obsolete_jvm_flags, flag_name, version) == 1); +} + +int Arguments::is_deprecated_flag(const char *flag_name, JDK_Version* version) { + return is_special_flag(deprecated_jvm_flags, flag_name, version); +} + +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; } // Constructs the system class path (aka boot class path) from the following @@ -574,7 +661,7 @@ } } -static bool set_bool_flag(char* name, bool value, Flag::Flags origin) { +static bool set_bool_flag(const char* name, bool value, Flag::Flags origin) { if (CommandLineFlags::boolAtPut(name, &value, origin) == Flag::SUCCESS) { return true; } else { @@ -582,7 +669,7 @@ } } -static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) { +static bool set_fp_numeric_flag(const char* name, char* value, Flag::Flags origin) { double v; if (sscanf(value, "%lf", &v) != 1) { return false; @@ -594,7 +681,7 @@ return false; } -static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) { +static bool set_numeric_flag(const char* name, char* value, Flag::Flags origin) { julong v; int int_v; intx intx_v; @@ -643,14 +730,14 @@ return false; } -static bool set_string_flag(char* name, const char* value, Flag::Flags origin) { +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(char* name, const char* new_value, Flag::Flags origin) { +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; @@ -678,6 +765,33 @@ 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; + 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 @@ -685,27 +799,46 @@ #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) { - return set_bool_flag(name, false, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; // "name" is a deprecated option that has expired. + } + return set_bool_flag(real_name, false, origin); } if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { - return set_bool_flag(name, true, origin); + 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 = Flag::find_flag(name, strlen(name)); + 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(name, value, origin); + return append_to_string_flag(real_name, value, origin); } else { if (value[0] == '\0') { value = NULL; } - return set_string_flag(name, value, origin); + return set_string_flag(real_name, value, origin); } + } else { + warn_if_deprecated = false; // if arg is deprecated, we've already done warning... } } @@ -715,7 +848,11 @@ if (value[0] == '\0') { value = NULL; } - return set_string_flag(name, value, origin); + 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.]" @@ -726,13 +863,21 @@ 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); + 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) { - return set_numeric_flag(name, value, origin); + 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; @@ -819,8 +964,8 @@ } bool Arguments::process_argument(const char* arg, - jboolean ignore_unrecognized, Flag::Flags origin) { - + jboolean ignore_unrecognized, + Flag::Flags origin) { JDK_Version since = JDK_Version(); if (parse_argument(arg, origin) || ignore_unrecognized) { @@ -849,7 +994,7 @@ 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); + warning("Ignoring option %s; support was removed in %s", stripped_argname, version); return true; } } @@ -1235,7 +1380,7 @@ 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.", + warning("Disabling UseAdaptiveSizePolicy; it is incompatible with %s.", collector_name); } FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); @@ -1712,7 +1857,6 @@ } 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" @@ -1742,11 +1886,6 @@ 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; @@ -1849,7 +1988,123 @@ } } - // Set up runtime image flags +// 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. @@ -2038,20 +2293,6 @@ 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. @@ -2588,7 +2829,7 @@ // 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); + 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()); @@ -2855,120 +3096,10 @@ _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); + jint result = set_aggressive_heap_flags(); + if (result != JNI_OK) { + return result; } - - // 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")) { @@ -3061,52 +3192,6 @@ 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); @@ -3126,19 +3211,6 @@ "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) { @@ -3490,7 +3562,7 @@ void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) { - warning("cannot dump shared archive while using shared archive"); + warning("Cannot dump shared archive while using shared archive"); } UseSharedSpaces = false; #ifdef _LP64 @@ -3725,7 +3797,7 @@ if (ScavengeRootsInCode == 0) { if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) { - warning("forcing ScavengeRootsInCode non-zero"); + warning("Forcing ScavengeRootsInCode non-zero"); } ScavengeRootsInCode = 1; } --- old/src/share/vm/runtime/arguments.hpp 2015-07-17 12:25:48.318263062 -0400 +++ new/src/share/vm/runtime/arguments.hpp 2015-07-17 12:25:48.180264787 -0400 @@ -368,6 +368,8 @@ // Aggressive optimization flags. static void set_aggressive_opts_flags(); + static jint set_aggressive_heap_flags(); + // Argument parsing static void do_pd_flag_adjustments(); static bool parse_argument(const char* arg, Flag::Flags origin); @@ -415,11 +417,24 @@ short* methodsNum, short* methodsMax, char*** methods, bool** allClasses ); - // Returns true if the string s is in the list of flags that have recently - // been made obsolete. If we detect one of these flags on the command - // line, instead of failing we print a warning message and ignore the - // flag. This gives the user a release or so to stop using the flag. - static bool is_newly_obsolete(const char* s, JDK_Version* buffer); + // Returns true if the flag is obsolete and fits into the range specified + // for being ignored. In the case the 'version' buffer is filled in with + // the version number when the flag became obsolete. Otherwise the flag has + // expired and should be ignored. + static bool is_newly_obsolete(const char* flag_name, JDK_Version* version); + + // Returns 1 if the flag is deprecated and jdk version is in the range specified. + // In this case the 'version' buffer is filled in with the version number when + // the flag became deprecated. + // Returns -1 if the flag is deprecated and has expired (should be ignored). + // Returns 0 if the flag is not deprecated. + static int is_deprecated_flag(const char* flag_name, JDK_Version* version); + + // Return the real name for the flag passed on the command line. + static const char* real_flag_name(const char *flag_name); + + // Return the "real" name for option arg if arg is an alias, and print a warning if arg is deprecated. + static const char* handle_aliases_and_deprecation(const char* arg, bool warn); static short CompileOnlyClassesNum; static short CompileOnlyClassesMax; @@ -471,7 +486,6 @@ // Check for consistency in the selection of the garbage collector. static bool check_gc_consistency(); // Check user-selected gc - static void check_deprecated_gc_flags(); // Check consistency or otherwise of VM argument settings static bool check_vm_args_consistency(); // Used by os_solaris --- old/src/share/vm/runtime/globals.hpp 2015-07-17 12:25:49.224251736 -0400 +++ new/src/share/vm/runtime/globals.hpp 2015-07-17 12:25:49.084253486 -0400 @@ -2195,11 +2195,6 @@ "size") \ range(1, max_uintx) \ \ - product(uintx, DefaultMaxRAMFraction, 4, \ - "Maximum fraction (1/n) of real memory used for maximum heap " \ - "size; deprecated: to be renamed to MaxRAMFraction") \ - range(1, max_uintx) \ - \ product(uintx, MinRAMFraction, 2, \ "Minimum fraction (1/n) of real memory used for maximum heap " \ "size on systems with small physical memory size") \ --- old/src/share/vm/runtime/java.hpp 2015-07-17 12:25:50.025241722 -0400 +++ new/src/share/vm/runtime/java.hpp 2015-07-17 12:25:49.615246848 -0400 @@ -137,6 +137,14 @@ return JDK_Version(major, 0, 0, update_number); } + static JDK_Version undefined() { + return JDK_Version(0); + } + + bool is_undefined() const { + return (_major == 0); + } + uint8_t major_version() const { return _major; } uint8_t minor_version() const { return _minor; } uint8_t micro_version() const { return _micro; } --- old/test/TEST.groups 2015-07-17 12:25:50.506235709 -0400 +++ new/test/TEST.groups 2015-07-17 12:25:50.375237346 -0400 @@ -190,7 +190,6 @@ gc/g1/TestShrinkToOneRegion.java \ gc/metaspace/G1AddMetaspaceDependency.java \ gc/startup_warnings/TestCMS.java \ - gc/startup_warnings/TestDefaultMaxRAMFraction.java \ gc/startup_warnings/TestDefNewCMS.java \ gc/startup_warnings/TestParallelGC.java \ gc/startup_warnings/TestParallelScavengeSerialOld.java \ --- old/test/gc/startup_warnings/TestParNewCMS.java 2015-07-17 12:25:51.025229220 -0400 +++ new/test/gc/startup_warnings/TestParNewCMS.java 2015-07-17 12:25:50.892230883 -0400 @@ -40,7 +40,7 @@ public static void main(String args[]) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParNewGC", "-XX:+UseConcMarkSweepGC", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: The UseParNewGC flag is deprecated and will likely be removed in a future release"); + output.shouldContain("warning: Option UseParNewGC was deprecated in version"); output.shouldNotContain("error"); output.shouldHaveExitValue(0); } --- old/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java 2015-07-17 12:25:51.501223270 -0400 +++ new/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java 2015-07-17 12:25:51.369224920 -0400 @@ -46,7 +46,7 @@ "-XX:NmethodSweepFraction=10", "-version"); OutputAnalyzer output2 = new OutputAnalyzer(pb2.start()); - output2.shouldContain("ignoring option").shouldContain("support was removed"); + output2.shouldContain("Ignoring option").shouldContain("support was removed"); output2.shouldContain("NmethodSweepFraction"); } } --- old/test/runtime/NMT/AutoshutdownNMT.java 2015-07-17 12:25:51.985217219 -0400 +++ new/test/runtime/NMT/AutoshutdownNMT.java 2015-07-17 12:25:51.850218907 -0400 @@ -41,6 +41,6 @@ "-XX:-AutoShutdownNMT", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("ignoring option AutoShutdownNMT"); + output.shouldContain("Ignoring option AutoShutdownNMT"); } } --- old/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java 2015-07-17 12:25:52.477211068 -0400 +++ new/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java 2015-07-17 12:25:52.344212731 -0400 @@ -261,6 +261,73 @@ } /** + * Start VM with given options and values. + * Generates command line option flags from + * {@code optionNames} and {@code optionValues}. + * + * @param optionNames names of options to pass in + * @param optionValues values of options + * @param additionalVMOpts additional options that should be + * passed to JVM. + * @return output from vm process + */ + public static OutputAnalyzer startVMWithOptions(String[] optionNames, + String[] optionValues, + String... additionalVMOpts) throws Throwable { + List vmOpts = new ArrayList<>(); + if (optionNames == null || optionValues == null || optionNames.length != optionValues.length) { + throw new IllegalArgumentException("optionNames and/or optionValues"); + } + + for (int i = 0; i < optionNames.length; i++) { + vmOpts.add(prepareFlag(optionNames[i], optionValues[i])); + } + Collections.addAll(vmOpts, additionalVMOpts); + Collections.addAll(vmOpts, "-version"); + + ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder( + vmOpts.toArray(new String[vmOpts.size()])); + + return new OutputAnalyzer(processBuilder.start()); + } + + /** + * Verifies from the output that values of specified JVM options were the same as + * expected values. + * + * @param outputAnalyzer search output for expect options and values. + * @param optionNames names of tested options. + * @param expectedValues expected values of tested options. + * @throws Throwable if verification fails or some other issues occur. + */ + public static void verifyOptionValuesFromOutput(OutputAnalyzer outputAnalyzer, + String[] optionNames, + String[] expectedValues) throws Throwable { + outputAnalyzer.shouldHaveExitValue(0); + for (int i = 0; i < optionNames.length; i++) { + outputAnalyzer.shouldMatch(String.format( + CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT, + optionNames[i], expectedValues[i])); + } + } + + /** + * Verifies that value of specified JVM options are the same as + * expected values. + * Generates command line option flags from + * {@code optionNames} and {@code expectedValues}. + * + * @param optionNames names of tested options. + * @param expectedValues expected values of tested options. + * @throws Throwable if verification fails or some other issues occur. + */ + public static void verifyOptionValues(String[] optionNames, + String[] expectedValues) throws Throwable { + OutputAnalyzer outputAnalyzer = startVMWithOptions(optionNames, expectedValues, "-XX:+PrintFlagsFinal"); + verifyOptionValuesFromOutput(outputAnalyzer, optionNames, expectedValues); + } + + /** * Verifies that value of specified JVM when type of newly started VM * is the same as the type of current. * This method filter out option with {@code optionName} @@ -312,6 +379,24 @@ } /** + * Prepares generic command line flag with name {@code name} by setting + * it's value to {@code value}. + * + * @param name the name of option to be prepared + * @param value the value of option ("+" or "-" can be used instead of "true" or "false") + * @return prepared command line flag + */ + public static String prepareFlag(String name, String value) { + if (value.equals("+") || value.equalsIgnoreCase("true")) { + return "-XX:+" + name; + } else if (value.equals("-") || value.equalsIgnoreCase("false")) { + return "-XX:-" + name; + } else { + return "-XX:" + name + "=" + value; + } + } + + /** * Returns message that should occur in VM output if option * {@code optionName} if unrecognized. * --- /dev/null 2015-06-26 10:12:47.262865445 -0400 +++ new/test/runtime/CommandLine/VMAliasOptions.java 2015-07-17 12:25:52.801207018 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.*; +import jdk.test.lib.cli.*; + +/* + * @test + * @bug 8061611 + * @summary Test that various alias options correctly set the target options. See aliased_jvm_flags in arguments.cpp. + * @library /testlibrary + */ +public class VMAliasOptions { + + /** + * each entry is {[0]: alias name, [1]: alias target, [2]: value to set + * (true/false/n/string)}. + */ + public static final String[][] ALIAS_OPTIONS = { + {"DefaultMaxRAMFraction", "MaxRAMFraction", "1032"}, + {"CMSMarkStackSizeMax", "MarkStackSizeMax", "1032"}, + {"CMSMarkStackSize", "MarkStackSize", "1032"}, + {"G1MarkStackSize", "MarkStackSize", "1032"}, + {"ParallelMarkingThreads", "ConcGCThreads", "2"}, + {"ParallelCMSThreads", "ConcGCThreads", "2"}, + {"CreateMinidumpOnCrash", "CreateCoredumpOnCrash", "false" }, + }; + + static void testAliases(String[][] optionInfo) throws Throwable { + String aliasNames[] = new String[optionInfo.length]; + String optionNames[] = new String[optionInfo.length]; + String expectedValues[] = new String[optionInfo.length]; + for (int i = 0; i < optionInfo.length; i++) { + aliasNames[i] = optionInfo[i][0]; + optionNames[i] = optionInfo[i][1]; + expectedValues[i] = optionInfo[i][2]; + } + + OutputAnalyzer output = CommandLineOptionTest.startVMWithOptions(aliasNames, expectedValues, "-XX:+PrintFlagsFinal"); + CommandLineOptionTest.verifyOptionValuesFromOutput(output, optionNames, expectedValues); + } + + public static void main(String[] args) throws Throwable { + testAliases(ALIAS_OPTIONS); + } +} --- /dev/null 2015-06-26 10:12:47.262865445 -0400 +++ new/test/runtime/CommandLine/VMDeprecatedOptions.java 2015-07-17 12:25:53.227201692 -0400 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.*; +import jdk.test.lib.cli.*; + +/* + * @test + * @bug 8066821 + * @summary Test that various options are deprecated. See deprecated_jvm_flags in arguments.cpp. + * @library /testlibrary + */ +public class VMDeprecatedOptions { + + /** + * each entry is {[0]: option name, [1]: value to set + * (true/false/n/string)}. + */ + public static final String[][] DEPRECATED_OPTIONS = { + // deprecated non-alias flags: + {"MaxGCMinorPauseMillis", "1032"}, + {"UseParNewGC", "false"}, + + // deprecated alias flags (see also aliased_jvm_flags): + {"DefaultMaxRAMFraction", "4"}, + {"CMSMarkStackSizeMax", "1032"}, + {"CMSMarkStackSize", "1032"}, + {"G1MarkStackSize", "1032"}, + {"ParallelMarkingThreads", "2"}, + {"ParallelCMSThreads", "2"}, + {"CreateMinidumpOnCrash", "false"} + }; + + static String getDeprecationString(String optionName) { + return "Option " + optionName + + " was deprecated in version [\\S]+ and will likely be removed in a future release"; + } + + static void testDeprecated(String[][] optionInfo) throws Throwable { + String optionNames[] = new String[optionInfo.length]; + String expectedValues[] = new String[optionInfo.length]; + for (int i = 0; i < optionInfo.length; i++) { + optionNames[i] = optionInfo[i][0]; + expectedValues[i] = optionInfo[i][1]; + } + + OutputAnalyzer output = CommandLineOptionTest.startVMWithOptions(optionNames, expectedValues); + + // check for option deprecation messages: + output.shouldHaveExitValue(0); + for (String[] deprecated : optionInfo) { + String match = getDeprecationString(deprecated[0]); + output.shouldMatch(match); + } + } + + public static void main(String[] args) throws Throwable { + testDeprecated(DEPRECATED_OPTIONS); // Make sure that each deprecated option is mentioned in the output. + } +} --- old/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java 2015-07-17 12:25:53.774194854 -0400 +++ /dev/null 2015-06-26 10:12:47.262865445 -0400 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. -* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -* -* This code is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License version 2 only, as -* published by the Free Software Foundation. -* -* This code is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* version 2 for more details (a copy is included in the LICENSE file that -* accompanied this code). -* -* You should have received a copy of the GNU General Public License version -* 2 along with this work; if not, write to the Free Software Foundation, -* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -* -* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -* or visit www.oracle.com if you need additional information or have any -* questions. -*/ - -/* -* @test TestDefaultMaxRAMFraction -* @key gc -* @bug 8021967 -* @summary Test that the deprecated TestDefaultMaxRAMFraction flag print a warning message -* @library /testlibrary -* @modules java.base/sun.misc -* java.management -*/ - -import jdk.test.lib.OutputAnalyzer; -import jdk.test.lib.ProcessTools; - -public class TestDefaultMaxRAMFraction { - public static void main(String[] args) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:DefaultMaxRAMFraction=4", "-version"); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. Use MaxRAMFraction instead."); - output.shouldNotContain("error"); - output.shouldHaveExitValue(0); - } - -} --- old/test/gc/startup_warnings/TestNoParNew.java 2015-07-17 12:25:54.075191091 -0400 +++ /dev/null 2015-06-26 10:12:47.262865445 -0400 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -* -* This code is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License version 2 only, as -* published by the Free Software Foundation. -* -* This code is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* version 2 for more details (a copy is included in the LICENSE file that -* accompanied this code). -* -* You should have received a copy of the GNU General Public License version -* 2 along with this work; if not, write to the Free Software Foundation, -* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -* -* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -* or visit www.oracle.com if you need additional information or have any -* questions. -*/ - -/* -* @test TestNoParNew -* @key gc -* @bug 8065972 -* @summary Test that specifying -XX:-UseParNewGC on the command line logs a warning message -* @library /testlibrary -* @modules java.base/sun.misc -* java.management -*/ - -import jdk.test.lib.OutputAnalyzer; -import jdk.test.lib.ProcessTools; - - -public class TestNoParNew { - - public static void main(String args[]) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:-UseParNewGC", "-version"); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: The UseParNewGC flag is deprecated and will likely be removed in a future release"); - output.shouldNotContain("error"); - output.shouldHaveExitValue(0); - } - -}