# HG changeset patch # User amurillo # Date 1469155841 25200 # Node ID 330c9163d60464d93869858dcbb51ebecc3bb1ff # Parent e8373543a3f0f60589b7d72b1f9b172721124caf# Parent 5921b7f27d633923d1cd09b8cba7703e8148e86c Merge diff -r e8373543a3f0 -r 330c9163d604 hotspot/make/gensrc/GensrcAdlc.gmk --- a/hotspot/make/gensrc/GensrcAdlc.gmk Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/make/gensrc/GensrcAdlc.gmk Thu Jul 21 19:50:41 2016 -0700 @@ -51,6 +51,9 @@ ADLC_CFLAGS_WARNINGS := -W3 -D_CRT_SECURE_NO_WARNINGS endif + # Set the C++ standard if supported + ADLC_CFLAGS += $(CXXSTD_CXXFLAG) + # NOTE: The old build didn't set -DASSERT for windows but it doesn't seem to # hurt. ADLC_CFLAGS += -DASSERT diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/gc/g1/g1YoungGenSizer.cpp --- a/hotspot/src/share/vm/gc/g1/g1YoungGenSizer.cpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/gc/g1/g1YoungGenSizer.cpp Thu Jul 21 19:50:41 2016 -0700 @@ -45,7 +45,7 @@ "A new max generation size of " SIZE_FORMAT "k will be used.", NewSize/K, MaxNewSize/K, NewSize/K); } - MaxNewSize = NewSize; + FLAG_SET_ERGO(size_t, MaxNewSize, NewSize); } if (FLAG_IS_CMDLINE(NewSize)) { diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/gc/shared/collectorPolicy.cpp --- a/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp Thu Jul 21 19:50:41 2016 -0700 @@ -50,7 +50,6 @@ _initial_heap_byte_size(InitialHeapSize), _max_heap_byte_size(MaxHeapSize), _min_heap_byte_size(Arguments::min_heap_size()), - _max_heap_size_cmdline(false), _size_policy(NULL), _should_clear_all_soft_refs(false), _all_soft_refs_clear(false) @@ -92,7 +91,6 @@ if (_min_heap_byte_size != 0 && MaxHeapSize < _min_heap_byte_size) { vm_exit_during_initialization("Incompatible minimum and maximum heap sizes specified"); } - _max_heap_size_cmdline = true; } // Check heap parameter properties @@ -285,7 +283,7 @@ "heap_alignment: " SIZE_FORMAT " not aligned by gen_alignment: " SIZE_FORMAT, _heap_alignment, _gen_alignment); - // All generational heaps have a youngest gen; handle those flags here + // All generational heaps have a young gen; handle those flags here // Make sure the heap is large enough for two generations size_t smallest_new_size = young_gen_size_lower_bound(); @@ -307,7 +305,7 @@ // Make sure NewSize allows an old generation to fit even if set on the command line if (FLAG_IS_CMDLINE(NewSize) && NewSize >= _initial_heap_byte_size) { log_warning(gc, ergo)("NewSize was set larger than initial heap size, will use initial heap size."); - NewSize = bound_minus_alignment(NewSize, _initial_heap_byte_size); + FLAG_SET_ERGO(size_t, NewSize, bound_minus_alignment(NewSize, _initial_heap_byte_size)); } // Now take the actual NewSize into account. We will silently increase NewSize @@ -315,10 +313,7 @@ size_t bounded_new_size = bound_minus_alignment(NewSize, MaxHeapSize); bounded_new_size = MAX2(smallest_new_size, (size_t)align_size_down(bounded_new_size, _gen_alignment)); if (bounded_new_size != NewSize) { - // Do not use FLAG_SET_ERGO to update NewSize here, since this will override - // if NewSize was set on the command line or not. This information is needed - // later when setting the initial and minimum young generation size. - NewSize = bounded_new_size; + FLAG_SET_ERGO(size_t, NewSize, bounded_new_size); } _min_young_size = smallest_new_size; _initial_young_size = NewSize; @@ -361,11 +356,11 @@ vm_exit_during_initialization("Invalid young gen ratio specified"); } - OldSize = MAX2(OldSize, old_gen_size_lower_bound()); + if (OldSize < old_gen_size_lower_bound()) { + FLAG_SET_ERGO(size_t, OldSize, old_gen_size_lower_bound()); + } if (!is_size_aligned(OldSize, _gen_alignment)) { - // Setting OldSize directly to preserve information about the possible - // setting of OldSize on the command line. - OldSize = align_size_down(OldSize, _gen_alignment); + FLAG_SET_ERGO(size_t, OldSize, align_size_down(OldSize, _gen_alignment)); } if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(MaxHeapSize)) { @@ -384,7 +379,7 @@ // Adjust NewSize and OldSize or MaxHeapSize to match each other if (NewSize + OldSize > MaxHeapSize) { - if (_max_heap_size_cmdline) { + if (FLAG_IS_CMDLINE(MaxHeapSize)) { // Somebody has set a maximum heap size with the intention that we should not // exceed it. Adjust New/OldSize as necessary. size_t calculated_size = NewSize + OldSize; @@ -927,8 +922,23 @@ save_flags(); + // If NewSize has been ergonomically set, the collector policy + // should use it for min but calculate the initial young size + // using NewRatio. + flag_value = 20 * M; + set_basic_flag_values(); + FLAG_SET_ERGO(size_t, NewSize, flag_value); + verify_young_min(flag_value); + + set_basic_flag_values(); + FLAG_SET_ERGO(size_t, NewSize, flag_value); + verify_scaled_young_initial(InitialHeapSize); + // If NewSize is set on the command line, it should be used // for both min and initial young size if less than min heap. + // Note that once a flag has been set with FLAG_SET_CMDLINE it + // will be treated as it have been set on the command line for + // the rest of the VM lifetime. This is an irreversible change. flag_value = 20 * M; set_basic_flag_values(); FLAG_SET_CMDLINE(size_t, NewSize, flag_value); @@ -945,18 +955,6 @@ FLAG_SET_CMDLINE(size_t, NewSize, flag_value); verify_young_initial(flag_value); - // If NewSize has been ergonomically set, the collector policy - // should use it for min but calculate the initial young size - // using NewRatio. - flag_value = 20 * M; - set_basic_flag_values(); - FLAG_SET_ERGO(size_t, NewSize, flag_value); - verify_young_min(flag_value); - - set_basic_flag_values(); - FLAG_SET_ERGO(size_t, NewSize, flag_value); - verify_scaled_young_initial(InitialHeapSize); - restore_flags(); } diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/gc/shared/collectorPolicy.hpp --- a/hotspot/src/share/vm/gc/shared/collectorPolicy.hpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/gc/shared/collectorPolicy.hpp Thu Jul 21 19:50:41 2016 -0700 @@ -72,10 +72,6 @@ size_t _space_alignment; size_t _heap_alignment; - // Needed to keep information if MaxHeapSize was set on the command line - // when the flag value is aligned etc by ergonomics. - bool _max_heap_size_cmdline; - // The sizing of the heap is controlled by a sizing policy. AdaptiveSizePolicy* _size_policy; diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/opto/runtime.cpp --- a/hotspot/src/share/vm/opto/runtime.cpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/opto/runtime.cpp Thu Jul 21 19:50:41 2016 -0700 @@ -59,6 +59,7 @@ #include "opto/mulnode.hpp" #include "opto/runtime.hpp" #include "opto/subnode.hpp" +#include "prims/jvmtiThreadState.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" @@ -1451,6 +1452,11 @@ } #endif + JvmtiThreadState *state = thread->jvmti_thread_state(); + if (state != NULL) { + state->set_exception_detected(); + } + thread->set_vm_result(exception); // Frame not compiled (handles deoptimization blob) return SharedRuntime::raw_exception_handler_for_return_address(thread, ret_pc); diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/runtime/globals.cpp --- a/hotspot/src/share/vm/runtime/globals.cpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/runtime/globals.cpp Thu Jul 21 19:50:41 2016 -0700 @@ -334,7 +334,8 @@ void Flag::set_origin(Flags origin) { assert((origin & VALUE_ORIGIN_MASK) == origin, "sanity"); - _flags = Flags((_flags & ~VALUE_ORIGIN_MASK) | origin); + Flags new_origin = Flags((origin == COMMAND_LINE) ? Flags(origin | ORIG_COMMAND_LINE) : origin); + _flags = Flags((_flags & ~VALUE_ORIGIN_MASK) | new_origin); } bool Flag::is_default() { @@ -346,7 +347,11 @@ } bool Flag::is_command_line() { - return (get_origin() == COMMAND_LINE); + return (_flags & ORIG_COMMAND_LINE) != 0; +} + +void Flag::set_command_line() { + _flags = Flags(_flags | ORIG_COMMAND_LINE); } bool Flag::is_product() const { @@ -464,25 +469,31 @@ } if (!printRanges) { - - st->print("%9s %-40s %c= ", _type, _name, (!is_default() ? ':' : ' ')); + // The print below assumes that the flag name is 40 characters or less. + // This works for most flags, but there are exceptions. Our longest flag + // name right now is UseAdaptiveGenerationSizePolicyAtMajorCollection and + // its minor collection buddy. These are 48 characters. We use a buffer of + // 10 spaces below to adjust the space between the flag value and the + // column of flag type and origin that is printed in the end of the line. + char spaces[10 + 1] = " "; + st->print("%9s %-40s = ", _type, _name); if (is_bool()) { - st->print("%-16s", get_bool() ? "true" : "false"); + st->print("%-20s", get_bool() ? "true" : "false"); } else if (is_int()) { - st->print("%-16d", get_int()); + st->print("%-20d", get_int()); } else if (is_uint()) { - st->print("%-16u", get_uint()); + st->print("%-20u", get_uint()); } else if (is_intx()) { - st->print(INTX_FORMAT_W(-16), get_intx()); + st->print(INTX_FORMAT_W(-20), get_intx()); } else if (is_uintx()) { - st->print(UINTX_FORMAT_W(-16), get_uintx()); + st->print(UINTX_FORMAT_W(-20), get_uintx()); } else if (is_uint64_t()) { - st->print(UINT64_FORMAT_W(-16), get_uint64_t()); + st->print(UINT64_FORMAT_W(-20), get_uint64_t()); } else if (is_size_t()) { - st->print(SIZE_FORMAT_W(-16), get_size_t()); + st->print(SIZE_FORMAT_W(-20), get_size_t()); } else if (is_double()) { - st->print("%-16f", get_double()); + st->print("%-20f", get_double()); } else if (is_ccstr()) { const char* cp = get_ccstr(); if (cp != NULL) { @@ -494,13 +505,14 @@ cp = eol+1; st->print("%5s %-35s += ", "", _name); } - st->print("%-16s", cp); + st->print("%-20s", cp); } - else st->print("%-16s", ""); + else st->print("%-20s", ""); } - - st->print("%-20s", " "); - print_kind(st); + assert(strlen(_name) < 50, "Flag name is longer than expected"); + spaces[50 - MAX2((size_t)40, strlen(_name))] = '\0'; + st->print("%s", spaces); + print_kind_and_origin(st); #ifndef PRODUCT if (withComments) { @@ -533,8 +545,8 @@ } CommandLineFlagRangeList::print(st, _name, func); - st->print(" %-20s", " "); - print_kind(st); + st->print(" %-16s", " "); + print_kind_and_origin(st); #ifndef PRODUCT if (withComments) { @@ -546,7 +558,7 @@ } } -void Flag::print_kind(outputStream* st) { +void Flag::print_kind_and_origin(outputStream* st) { struct Data { int flag; const char* name; @@ -572,23 +584,58 @@ }; if ((_flags & KIND_MASK) != 0) { - st->print("{"); bool is_first = true; + const size_t buffer_size = 64; + size_t buffer_used = 0; + char kind[buffer_size]; + jio_snprintf(kind, buffer_size, "{"); + buffer_used++; for (int i = 0; data[i].flag != -1; i++) { Data d = data[i]; if ((_flags & d.flag) != 0) { if (is_first) { is_first = false; } else { - st->print(" "); + assert(buffer_used + 1 < buffer_size, "Too small buffer"); + jio_snprintf(kind + buffer_used, buffer_size - buffer_used, " "); + buffer_used++; } - st->print("%s", d.name); + size_t length = strlen(d.name); + assert(buffer_used + length < buffer_size, "Too small buffer"); + jio_snprintf(kind + buffer_used, buffer_size - buffer_used, "%s", d.name); + buffer_used += length; } } + assert(buffer_used + 2 <= buffer_size, "Too small buffer"); + jio_snprintf(kind + buffer_used, buffer_size - buffer_used, "}"); + st->print("%20s", kind); + } - st->print("}"); + int origin = _flags & VALUE_ORIGIN_MASK; + st->print(" {"); + switch(origin) { + case DEFAULT: + st->print("default"); break; + case COMMAND_LINE: + st->print("command line"); break; + case ENVIRON_VAR: + st->print("environment"); break; + case CONFIG_FILE: + st->print("config file"); break; + case MANAGEMENT: + st->print("management"); break; + case ERGONOMIC: + if (_flags & ORIG_COMMAND_LINE) { + st->print("command line, "); + } + st->print("ergonomic"); break; + case ATTACH_ON_DEMAND: + st->print("attach"); break; + case INTERNAL: + st->print("internal"); break; } + st->print("}"); } void Flag::print_as_flag(outputStream* st) { @@ -918,6 +965,12 @@ return true; } +void CommandLineFlagsEx::setOnCmdLine(CommandLineFlagWithType flag) { + Flag* faddr = address_of_flag(flag); + assert(faddr != NULL, "Unknown flag"); + faddr->set_command_line(); +} + template static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin) { E e; diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/runtime/globals.hpp Thu Jul 21 19:50:41 2016 -0700 @@ -229,7 +229,7 @@ struct Flag { enum Flags { - // value origin + // latest value origin DEFAULT = 0, COMMAND_LINE = 1, ENVIRON_VAR = 2, @@ -260,7 +260,10 @@ KIND_COMMERCIAL = 1 << 17, KIND_JVMCI = 1 << 18, - KIND_MASK = ~VALUE_ORIGIN_MASK + // set this bit if the flag was set on the command line + ORIG_COMMAND_LINE = 1 << 19, + + KIND_MASK = ~(VALUE_ORIGIN_MASK | ORIG_COMMAND_LINE) }; enum Error { @@ -272,7 +275,7 @@ MISSING_VALUE, // error parsing the textual form of the value WRONG_FORMAT, - // flag is not writeable + // flag is not writable NON_WRITABLE, // flag value is outside of its bounds OUT_OF_BOUNDS, @@ -367,6 +370,7 @@ bool is_default(); bool is_ergonomic(); bool is_command_line(); + void set_command_line(); bool is_product() const; bool is_manageable() const; @@ -396,7 +400,7 @@ // printRanges will print out flags type, name and range values as expected by -XX:+PrintFlagsRanges void print_on(outputStream* st, bool withComments = false, bool printRanges = false); - void print_kind(outputStream* st); + void print_kind_and_origin(outputStream* st); void print_as_flag(outputStream* st); static const char* flag_error_str(Flag::Error error); diff -r e8373543a3f0 -r 330c9163d604 hotspot/src/share/vm/runtime/globals_extension.hpp --- a/hotspot/src/share/vm/runtime/globals_extension.hpp Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/src/share/vm/runtime/globals_extension.hpp Thu Jul 21 19:50:41 2016 -0700 @@ -334,8 +334,9 @@ #define FLAG_SET_DEFAULT(name, value) ((name) = (value)) -#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::COMMAND_LINE)) -#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::ERGONOMIC)) +#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::setOnCmdLine(FLAG_MEMBER_WITH_TYPE(name, type)), \ + CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), Flag::COMMAND_LINE)) +#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), Flag::ERGONOMIC)) #define FLAG_SET_ERGO_IF_DEFAULT(type, name, value) \ do { \ if (FLAG_IS_DEFAULT(name)) { \ @@ -361,6 +362,8 @@ static bool is_default(CommandLineFlag flag); static bool is_ergo(CommandLineFlag flag); static bool is_cmdline(CommandLineFlag flag); + + static void setOnCmdLine(CommandLineFlagWithType flag); }; #endif // SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP diff -r e8373543a3f0 -r 330c9163d604 hotspot/test/compiler/arguments/CheckCICompilerCount.java --- a/hotspot/test/compiler/arguments/CheckCICompilerCount.java Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/test/compiler/arguments/CheckCICompilerCount.java Thu Jul 21 19:50:41 2016 -0700 @@ -72,14 +72,14 @@ "Improperly specified VM option 'CICompilerCount=0'" }, { - "intx CICompilerCount := 1 {product}" + "intx CICompilerCount = 1 {product} {command line}" }, { "CICompilerCount (0) must be at least 1", "Improperly specified VM option 'CICompilerCount=0'" }, { - "intx CICompilerCount := 1 {product}" + "intx CICompilerCount = 1 {product} {command line}" } }; @@ -127,14 +127,14 @@ "Improperly specified VM option 'CICompilerCount=1'" }, { - "intx CICompilerCount := 2 {product}" + "intx CICompilerCount = 2 {product} {command line, ergonomic}" }, { "CICompilerCount (1) must be at least 2", "Improperly specified VM option 'CICompilerCount=1'" }, { - "intx CICompilerCount := 2 {product}" + "intx CICompilerCount = 2 {product} {command line, ergonomic}" } }; diff -r e8373543a3f0 -r 330c9163d604 hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java --- a/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Thu Jul 21 19:50:41 2016 -0700 @@ -105,25 +105,25 @@ private static final String[][] NON_TIERED_EXPECTED_OUTPUTS = { { - "intx CompileThreshold := 1000 {pd product}", - "double CompileThresholdScaling = 1.000000 {product}" + "intx CompileThreshold = 1000 {pd product} {command line}", + "double CompileThresholdScaling = 1.000000 {product} {default}" }, { - "intx CompileThreshold := 1250 {pd product}", - "double CompileThresholdScaling := 1.250000 {product}" + "intx CompileThreshold = 1250 {pd product} {command line, ergonomic}", + "double CompileThresholdScaling = 1.250000 {product} {command line}" }, { - "intx CompileThreshold := 750 {pd product}", - "double CompileThresholdScaling := 0.750000 {product}" + "intx CompileThreshold = 750 {pd product} {command line, ergonomic}", + "double CompileThresholdScaling = 0.750000 {product} {command line}" }, { - "intx CompileThreshold := 1000 {pd product}", - "double CompileThresholdScaling := 0.000000 {product}", + "intx CompileThreshold = 1000 {pd product} {command line}", + "double CompileThresholdScaling = 0.000000 {product} {command line}", "interpreted mode" }, { - "intx CompileThreshold := 0 {pd product}", - "double CompileThresholdScaling := 0.750000 {product}", + "intx CompileThreshold = 0 {pd product} {command line, ergonomic}", + "double CompileThresholdScaling = 0.750000 {product} {command line}", "interpreted mode" } }; @@ -237,94 +237,94 @@ private static final String[][] TIERED_EXPECTED_OUTPUTS = { { - "intx Tier0BackedgeNotifyFreqLog := 10 {product}", - "intx Tier0InvokeNotifyFreqLog := 7 {product}", - "intx Tier23InlineeNotifyFreqLog := 20 {product}", - "intx Tier2BackedgeNotifyFreqLog := 14 {product}", - "intx Tier2InvokeNotifyFreqLog := 11 {product}", - "intx Tier3BackEdgeThreshold := 60000 {product}", - "intx Tier3BackedgeNotifyFreqLog := 13 {product}", - "intx Tier3CompileThreshold := 2000 {product}", - "intx Tier3InvocationThreshold := 200 {product}", - "intx Tier3InvokeNotifyFreqLog := 10 {product}", - "intx Tier3MinInvocationThreshold := 100 {product}", - "intx Tier4BackEdgeThreshold := 40000 {product}", - "intx Tier4CompileThreshold := 15000 {product}", - "intx Tier4InvocationThreshold := 5000 {product}", - "intx Tier4MinInvocationThreshold := 600 {product}", - "double CompileThresholdScaling = 1.000000 {product}" + "intx Tier0BackedgeNotifyFreqLog = 10 {product} {command line}", + "intx Tier0InvokeNotifyFreqLog = 7 {product} {command line}", + "intx Tier23InlineeNotifyFreqLog = 20 {product} {command line}", + "intx Tier2BackedgeNotifyFreqLog = 14 {product} {command line}", + "intx Tier2InvokeNotifyFreqLog = 11 {product} {command line}", + "intx Tier3BackEdgeThreshold = 60000 {product} {command line}", + "intx Tier3BackedgeNotifyFreqLog = 13 {product} {command line}", + "intx Tier3CompileThreshold = 2000 {product} {command line}", + "intx Tier3InvocationThreshold = 200 {product} {command line}", + "intx Tier3InvokeNotifyFreqLog = 10 {product} {command line}", + "intx Tier3MinInvocationThreshold = 100 {product} {command line}", + "intx Tier4BackEdgeThreshold = 40000 {product} {command line}", + "intx Tier4CompileThreshold = 15000 {product} {command line}", + "intx Tier4InvocationThreshold = 5000 {product} {command line}", + "intx Tier4MinInvocationThreshold = 600 {product} {command line}", + "double CompileThresholdScaling = 1.000000 {product} {default}" }, { - "intx Tier0BackedgeNotifyFreqLog := 9 {product}", - "intx Tier0InvokeNotifyFreqLog := 6 {product}", - "intx Tier23InlineeNotifyFreqLog := 19 {product}", - "intx Tier2BackedgeNotifyFreqLog := 13 {product}", - "intx Tier2InvokeNotifyFreqLog := 10 {product}", - "intx Tier3BackEdgeThreshold := 45000 {product}", - "intx Tier3BackedgeNotifyFreqLog := 12 {product}", - "intx Tier3CompileThreshold := 1500 {product}", - "intx Tier3InvocationThreshold := 150 {product}", - "intx Tier3InvokeNotifyFreqLog := 9 {product}", - "intx Tier3MinInvocationThreshold := 75 {product}", - "intx Tier4BackEdgeThreshold := 30000 {product}", - "intx Tier4CompileThreshold := 11250 {product}", - "intx Tier4InvocationThreshold := 3750 {product}", - "intx Tier4MinInvocationThreshold := 450 {product}", - "double CompileThresholdScaling := 0.750000 {product}" + "intx Tier0BackedgeNotifyFreqLog = 9 {product} {command line, ergonomic}", + "intx Tier0InvokeNotifyFreqLog = 6 {product} {command line, ergonomic}", + "intx Tier23InlineeNotifyFreqLog = 19 {product} {command line, ergonomic}", + "intx Tier2BackedgeNotifyFreqLog = 13 {product} {command line, ergonomic}", + "intx Tier2InvokeNotifyFreqLog = 10 {product} {command line, ergonomic}", + "intx Tier3BackEdgeThreshold = 45000 {product} {command line, ergonomic}", + "intx Tier3BackedgeNotifyFreqLog = 12 {product} {command line, ergonomic}", + "intx Tier3CompileThreshold = 1500 {product} {command line, ergonomic}", + "intx Tier3InvocationThreshold = 150 {product} {command line, ergonomic}", + "intx Tier3InvokeNotifyFreqLog = 9 {product} {command line, ergonomic}", + "intx Tier3MinInvocationThreshold = 75 {product} {command line, ergonomic}", + "intx Tier4BackEdgeThreshold = 30000 {product} {command line, ergonomic}", + "intx Tier4CompileThreshold = 11250 {product} {command line, ergonomic}", + "intx Tier4InvocationThreshold = 3750 {product} {command line, ergonomic}", + "intx Tier4MinInvocationThreshold = 450 {product} {command line, ergonomic}", + "double CompileThresholdScaling = 0.750000 {product} {command line}" }, { - "intx Tier0BackedgeNotifyFreqLog := 10 {product}", - "intx Tier0InvokeNotifyFreqLog := 7 {product}", - "intx Tier23InlineeNotifyFreqLog := 20 {product}", - "intx Tier2BackedgeNotifyFreqLog := 14 {product}", - "intx Tier2InvokeNotifyFreqLog := 11 {product}", - "intx Tier3BackEdgeThreshold := 75000 {product}", - "intx Tier3BackedgeNotifyFreqLog := 13 {product}", - "intx Tier3CompileThreshold := 2500 {product}", - "intx Tier3InvocationThreshold := 250 {product}", - "intx Tier3InvokeNotifyFreqLog := 10 {product}", - "intx Tier3MinInvocationThreshold := 125 {product}", - "intx Tier4BackEdgeThreshold := 50000 {product}", - "intx Tier4CompileThreshold := 18750 {product}", - "intx Tier4InvocationThreshold := 6250 {product}", - "intx Tier4MinInvocationThreshold := 750 {product}", - "double CompileThresholdScaling := 1.250000 {product}" + "intx Tier0BackedgeNotifyFreqLog = 10 {product} {command line, ergonomic}", + "intx Tier0InvokeNotifyFreqLog = 7 {product} {command line, ergonomic}", + "intx Tier23InlineeNotifyFreqLog = 20 {product} {command line, ergonomic}", + "intx Tier2BackedgeNotifyFreqLog = 14 {product} {command line, ergonomic}", + "intx Tier2InvokeNotifyFreqLog = 11 {product} {command line, ergonomic}", + "intx Tier3BackEdgeThreshold = 75000 {product} {command line, ergonomic}", + "intx Tier3BackedgeNotifyFreqLog = 13 {product} {command line, ergonomic}", + "intx Tier3CompileThreshold = 2500 {product} {command line, ergonomic}", + "intx Tier3InvocationThreshold = 250 {product} {command line, ergonomic}", + "intx Tier3InvokeNotifyFreqLog = 10 {product} {command line, ergonomic}", + "intx Tier3MinInvocationThreshold = 125 {product} {command line, ergonomic}", + "intx Tier4BackEdgeThreshold = 50000 {product} {command line, ergonomic}", + "intx Tier4CompileThreshold = 18750 {product} {command line, ergonomic}", + "intx Tier4InvocationThreshold = 6250 {product} {command line, ergonomic}", + "intx Tier4MinInvocationThreshold = 750 {product} {command line, ergonomic}", + "double CompileThresholdScaling = 1.250000 {product} {command line}" }, { - "intx Tier0BackedgeNotifyFreqLog := 11 {product}", - "intx Tier0InvokeNotifyFreqLog := 8 {product}", - "intx Tier23InlineeNotifyFreqLog := 21 {product}", - "intx Tier2BackedgeNotifyFreqLog := 15 {product}", - "intx Tier2InvokeNotifyFreqLog := 12 {product}", - "intx Tier3BackEdgeThreshold := 120000 {product}", - "intx Tier3BackedgeNotifyFreqLog := 14 {product}", - "intx Tier3CompileThreshold := 4000 {product}", - "intx Tier3InvocationThreshold := 400 {product}", - "intx Tier3InvokeNotifyFreqLog := 11 {product}", - "intx Tier3MinInvocationThreshold := 200 {product}", - "intx Tier4BackEdgeThreshold := 80000 {product}", - "intx Tier4CompileThreshold := 30000 {product}", - "intx Tier4InvocationThreshold := 10000 {product}", - "intx Tier4MinInvocationThreshold := 1200 {product}", - "double CompileThresholdScaling := 2.000000 {product}" + "intx Tier0BackedgeNotifyFreqLog = 11 {product} {command line, ergonomic}", + "intx Tier0InvokeNotifyFreqLog = 8 {product} {command line, ergonomic}", + "intx Tier23InlineeNotifyFreqLog = 21 {product} {command line, ergonomic}", + "intx Tier2BackedgeNotifyFreqLog = 15 {product} {command line, ergonomic}", + "intx Tier2InvokeNotifyFreqLog = 12 {product} {command line, ergonomic}", + "intx Tier3BackEdgeThreshold = 120000 {product} {command line, ergonomic}", + "intx Tier3BackedgeNotifyFreqLog = 14 {product} {command line, ergonomic}", + "intx Tier3CompileThreshold = 4000 {product} {command line, ergonomic}", + "intx Tier3InvocationThreshold = 400 {product} {command line, ergonomic}", + "intx Tier3InvokeNotifyFreqLog = 11 {product} {command line, ergonomic}", + "intx Tier3MinInvocationThreshold = 200 {product} {command line, ergonomic}", + "intx Tier4BackEdgeThreshold = 80000 {product} {command line, ergonomic}", + "intx Tier4CompileThreshold = 30000 {product} {command line, ergonomic}", + "intx Tier4InvocationThreshold = 10000 {product} {command line, ergonomic}", + "intx Tier4MinInvocationThreshold = 1200 {product} {command line, ergonomic}", + "double CompileThresholdScaling = 2.000000 {product} {command line}" }, { - "intx Tier0BackedgeNotifyFreqLog := 10 {product}", - "intx Tier0InvokeNotifyFreqLog := 7 {product}", - "intx Tier23InlineeNotifyFreqLog := 20 {product}", - "intx Tier2BackedgeNotifyFreqLog := 14 {product}", - "intx Tier2InvokeNotifyFreqLog := 11 {product}", - "intx Tier3BackEdgeThreshold := 60000 {product}", - "intx Tier3BackedgeNotifyFreqLog := 13 {product}", - "intx Tier3CompileThreshold := 2000 {product}", - "intx Tier3InvocationThreshold := 200 {product}", - "intx Tier3InvokeNotifyFreqLog := 10 {product}", - "intx Tier3MinInvocationThreshold := 100 {product}", - "intx Tier4BackEdgeThreshold := 40000 {product}", - "intx Tier4CompileThreshold := 15000 {product}", - "intx Tier4InvocationThreshold := 5000 {product}", - "intx Tier4MinInvocationThreshold := 600 {product}", - "double CompileThresholdScaling := 0.000000 {product}", + "intx Tier0BackedgeNotifyFreqLog = 10 {product} {command line}", + "intx Tier0InvokeNotifyFreqLog = 7 {product} {command line}", + "intx Tier23InlineeNotifyFreqLog = 20 {product} {command line}", + "intx Tier2BackedgeNotifyFreqLog = 14 {product} {command line}", + "intx Tier2InvokeNotifyFreqLog = 11 {product} {command line}", + "intx Tier3BackEdgeThreshold = 60000 {product} {command line}", + "intx Tier3BackedgeNotifyFreqLog = 13 {product} {command line}", + "intx Tier3CompileThreshold = 2000 {product} {command line}", + "intx Tier3InvocationThreshold = 200 {product} {command line}", + "intx Tier3InvokeNotifyFreqLog = 10 {product} {command line}", + "intx Tier3MinInvocationThreshold = 100 {product} {command line}", + "intx Tier4BackEdgeThreshold = 40000 {product} {command line}", + "intx Tier4CompileThreshold = 15000 {product} {command line}", + "intx Tier4InvocationThreshold = 5000 {product} {command line}", + "intx Tier4MinInvocationThreshold = 600 {product} {command line}", + "double CompileThresholdScaling = 0.000000 {product} {command line}", "interpreted mode" } }; diff -r e8373543a3f0 -r 330c9163d604 hotspot/test/gc/metaspace/TestMetaspaceSizeFlags.java --- a/hotspot/test/gc/metaspace/TestMetaspaceSizeFlags.java Wed Jul 05 22:00:06 2017 +0200 +++ b/hotspot/test/gc/metaspace/TestMetaspaceSizeFlags.java Thu Jul 21 19:50:41 2016 -0700 @@ -74,8 +74,8 @@ OutputAnalyzer output = run(maxMetaspaceSize, metaspaceSize); output.shouldNotMatch("Error occurred during initialization of VM\n.*"); - String stringMaxMetaspaceSize = output.firstMatch(".* MaxMetaspaceSize .* := (\\d+).*", 1); - String stringMetaspaceSize = output.firstMatch(".* MetaspaceSize .* := (\\d+).*", 1); + String stringMaxMetaspaceSize = output.firstMatch(".* MaxMetaspaceSize .* = (\\d+).*", 1); + String stringMetaspaceSize = output.firstMatch(".* MetaspaceSize .* = (\\d+).*", 1); return new MetaspaceFlags(Long.parseLong(stringMaxMetaspaceSize), Long.parseLong(stringMetaspaceSize)); diff -r e8373543a3f0 -r 330c9163d604 hotspot/test/serviceability/jvmti/ExceptionCaughtOutOfPhase/ExceptionCaughtOutOfPhaseTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/ExceptionCaughtOutOfPhase/ExceptionCaughtOutOfPhaseTest.java Thu Jul 21 19:50:41 2016 -0700 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2016, 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 java.security.AccessController; +import java.security.PrivilegedAction; + +/* + * @test + * @bug 8134434 + * @summary JVM_DoPrivileged() fires assert(_exception_caught == false) failed: _exception_caught is out of phase + * @run main/othervm -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -Xbatch ExceptionCaughtOutOfPhaseTest + */ + +public class ExceptionCaughtOutOfPhaseTest { + public static void main(String[] args) { + PrivilegedAction action = new HotThrowingAction(); + System.out.println("### Warm-up"); + for(int i=0; i<11000; i++) { + try { + action.run(); // call run() to get it compiled + } catch(Throwable t) { + // ignored + } + } + + System.out.println("### Warm-up done"); + System.out.println("### Executing privileged action"); + + try { + AccessController.doPrivileged(action); + } catch (Error e) { + // ignored + } + } + + public static class HotThrowingAction implements PrivilegedAction { + public Object run() { + throw new Error(); + } + } +}