--- a/.hgtags Sun Jul 07 19:40:48 2019 -0400
+++ b/.hgtags Sun Jul 07 20:28:41 2019 -0400
@@ -569,3 +569,5 @@
43627549a488b7d0b4df8fad436e36233df89877 jdk-14+2
b7f68ddec66f996ae3aad03291d129ca9f02482d jdk-13+27
e64383344f144217c36196c3c8a2df8f588a2af3 jdk-14+3
+1e95931e7d8fa7e3899340a9c7cb28dbea50c10c jdk-13+28
+19d0b382f0869f72d4381b54fa129f1c74b6e766 jdk-14+4
--- a/make/autoconf/flags-cflags.m4 Sun Jul 07 19:40:48 2019 -0400
+++ b/make/autoconf/flags-cflags.m4 Sun Jul 07 20:28:41 2019 -0400
@@ -576,8 +576,9 @@
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
# Suggested additions: -qsrcmsg to get improved error reporting
- TOOLCHAIN_CFLAGS_JDK="-qchars=signed -qfullpath -qsaveopt -qstackprotect" # add on both CFLAGS
- TOOLCHAIN_CFLAGS_JVM="-qtune=balanced \
+ # set -qtbtable=full for a better traceback table/better stacks in hs_err when xlc16 is used
+ TOOLCHAIN_CFLAGS_JDK="-qtbtable=full -qchars=signed -qfullpath -qsaveopt -qstackprotect" # add on both CFLAGS
+ TOOLCHAIN_CFLAGS_JVM="-qtbtable=full -qtune=balanced \
-qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
-qlanglvl=noredefmac -qnortti -qnoeh -qignerrno -qstackprotect"
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
--- a/src/hotspot/os/windows/attachListener_windows.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/os/windows/attachListener_windows.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -272,23 +272,13 @@
// open the pipe to the client
HANDLE Win32AttachOperation::open_pipe() {
- HANDLE hPipe;
-
- hPipe = ::CreateFile( pipe(), // pipe name
+ HANDLE hPipe = ::CreateFile( pipe(), // pipe name
GENERIC_WRITE, // write only
0, // no sharing
NULL, // default security attributes
OPEN_EXISTING, // opens existing pipe
0, // default attributes
NULL); // no template file
-
- if (hPipe != INVALID_HANDLE_VALUE) {
- // shouldn't happen as there is a pipe created per operation
- if (::GetLastError() == ERROR_PIPE_BUSY) {
- ::CloseHandle(hPipe);
- return INVALID_HANDLE_VALUE;
- }
- }
return hPipe;
}
@@ -307,8 +297,7 @@
}
buf += nwrote;
len -= nwrote;
- }
- while (len > 0);
+ } while (len > 0);
return TRUE;
}
@@ -326,6 +315,7 @@
// java_suspend_self() via check_and_wait_while_suspended()
HANDLE hPipe = open_pipe();
+ int lastError = (int)::GetLastError();
if (hPipe != INVALID_HANDLE_VALUE) {
BOOL fSuccess;
@@ -337,6 +327,7 @@
if (fSuccess) {
fSuccess = write_pipe(hPipe, (char*)result_stream->base(), (int)(result_stream->size()));
}
+ lastError = (int)::GetLastError();
// Need to flush buffers
FlushFileBuffers(hPipe);
@@ -345,10 +336,10 @@
if (fSuccess) {
log_debug(attach)("wrote result of attach operation %s to pipe %s", name(), pipe());
} else {
- log_error(attach)("failure writing result of operation %s to pipe %s", name(), pipe());
+ log_error(attach)("failure (%d) writing result of operation %s to pipe %s", lastError, name(), pipe());
}
} else {
- log_error(attach)("could not open pipe %s to send result of operation %s", pipe(), name());
+ log_error(attach)("could not open (%d) pipe %s to send result of operation %s", lastError, pipe(), name());
}
DWORD res = ::WaitForSingleObject(Win32AttachListener::mutex(), INFINITE);
--- a/src/hotspot/share/c1/c1_Runtime1.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/c1/c1_Runtime1.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -294,6 +294,12 @@
if (entry == entry_for((StubID)id)) return name_for((StubID)id);
}
+ BarrierSetC1* bsc1 = BarrierSet::barrier_set()->barrier_set_c1();
+ const char* name = bsc1->rtcall_name_for_address(entry);
+ if (name != NULL) {
+ return name;
+ }
+
#define FUNCTION_CASE(a, f) \
if ((intptr_t)a == CAST_FROM_FN_PTR(intptr_t, f)) return #f
--- a/src/hotspot/share/classfile/classLoaderData.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/classfile/classLoaderData.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -266,6 +266,19 @@
}
#endif // PRODUCT
+void ClassLoaderData::clear_claim(int claim) {
+ for (;;) {
+ int old_claim = Atomic::load(&_claim);
+ if ((old_claim & claim) == 0) {
+ return;
+ }
+ int new_claim = old_claim & ~claim;
+ if (Atomic::cmpxchg(new_claim, &_claim, old_claim) == old_claim) {
+ return;
+ }
+ }
+}
+
bool ClassLoaderData::try_claim(int claim) {
for (;;) {
int old_claim = Atomic::load(&_claim);
--- a/src/hotspot/share/classfile/classLoaderData.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/classfile/classLoaderData.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -206,16 +206,17 @@
// The "claim" is typically used to check if oops_do needs to be applied on
// the CLD or not. Most GCs only perform strong marking during the marking phase.
- enum {
- _claim_none = 0,
- _claim_finalizable = 2,
- _claim_strong = 3
+ enum Claim {
+ _claim_none = 0,
+ _claim_finalizable = 2,
+ _claim_strong = 3,
+ _claim_other = 4
};
void clear_claim() { _claim = 0; }
+ void clear_claim(int claim);
bool claimed() const { return _claim != 0; }
+ bool claimed(int claim) const { return (_claim & claim) == claim; }
bool try_claim(int claim);
- int get_claim() const { return _claim; }
- void set_claim(int claim) { _claim = claim; }
// Computes if the CLD is alive or not. This is safe to call in concurrent
// contexts.
--- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -64,6 +64,11 @@
}
}
+void ClassLoaderDataGraph::clear_claimed_marks(int claim) {
+ for (ClassLoaderData* cld = OrderAccess::load_acquire(&_head); cld != NULL; cld = cld->next()) {
+ cld->clear_claim(claim);
+ }
+}
// Class iterator used by the compiler. It gets some number of classes at
// a safepoint to decay invocation counters on the methods.
class ClassLoaderDataGraphKlassIteratorStatic {
@@ -471,7 +476,7 @@
// The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true);
ClassLoaderData* curr = _head;
while (curr != _saved_head) {
- if (!curr->claimed()) {
+ if (!curr->claimed(ClassLoaderData::_claim_strong)) {
array->push(curr);
LogTarget(Debug, class, loader, data) lt;
if (lt.is_enabled()) {
--- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -68,6 +68,7 @@
static void clean_module_and_package_info();
static void purge();
static void clear_claimed_marks();
+ static void clear_claimed_marks(int claim);
// Iteration through CLDG inside a safepoint; GC support
static void cld_do(CLDClosure* cl);
static void cld_unloading_do(CLDClosure* cl);
--- a/src/hotspot/share/classfile/vmSymbols.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/classfile/vmSymbols.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -1088,6 +1088,7 @@
\
/* support for Unsafe */ \
do_class(jdk_internal_misc_Unsafe, "jdk/internal/misc/Unsafe") \
+ do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \
\
do_intrinsic(_allocateInstance, jdk_internal_misc_Unsafe, allocateInstance_name, allocateInstance_signature, F_RN) \
do_name( allocateInstance_name, "allocateInstance") \
--- a/src/hotspot/share/compiler/disassembler.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/compiler/disassembler.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -315,56 +315,96 @@
}
}
-decode_env::decode_env(CodeBuffer* code, outputStream* output) {
- memset(this, 0, sizeof(*this));
- _output = output ? output : tty;
- _codeBlob = NULL;
- _codeBuffer = code;
- _helpPrinted = false;
+decode_env::decode_env(CodeBuffer* code, outputStream* output) :
+ _output(output ? output : tty),
+ _codeBuffer(code),
+ _codeBlob(NULL),
+ _nm(NULL),
+ _strings(),
+ _start(NULL),
+ _end(NULL),
+ _option_buf(),
+ _print_raw(0),
+ _cur_insn(NULL),
+ _bytes_per_line(0),
+ _pre_decode_alignment(0),
+ _post_decode_alignment(0),
+ _print_file_name(false),
+ _print_help(false),
+ _helpPrinted(false) {
+ memset(_option_buf, 0, sizeof(_option_buf));
process_options(_output);
}
-decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c) {
- memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields.
- _output = output ? output : tty;
- _codeBlob = code;
- _codeBuffer = NULL;
- _helpPrinted = false;
- if (_codeBlob != NULL && _codeBlob->is_nmethod()) {
- _nm = (nmethod*) code;
- }
+decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c) :
+ _output(output ? output : tty),
+ _codeBuffer(NULL),
+ _codeBlob(code),
+ _nm(_codeBlob != NULL && _codeBlob->is_nmethod() ? (nmethod*) code : NULL),
+ _strings(),
+ _start(NULL),
+ _end(NULL),
+ _option_buf(),
+ _print_raw(0),
+ _cur_insn(NULL),
+ _bytes_per_line(0),
+ _pre_decode_alignment(0),
+ _post_decode_alignment(0),
+ _print_file_name(false),
+ _print_help(false),
+ _helpPrinted(false) {
+
+ memset(_option_buf, 0, sizeof(_option_buf));
_strings.copy(c);
-
process_options(_output);
}
-decode_env::decode_env(nmethod* code, outputStream* output, CodeStrings c) {
- memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields.
- _output = output ? output : tty;
- _codeBlob = NULL;
- _codeBuffer = NULL;
- _nm = code;
- _start = _nm->code_begin();
- _end = _nm->code_end();
- _helpPrinted = false;
+decode_env::decode_env(nmethod* code, outputStream* output, CodeStrings c) :
+ _output(output ? output : tty),
+ _codeBuffer(NULL),
+ _codeBlob(NULL),
+ _nm(code),
+ _strings(),
+ _start(_nm->code_begin()),
+ _end(_nm->code_end()),
+ _option_buf(),
+ _print_raw(0),
+ _cur_insn(NULL),
+ _bytes_per_line(0),
+ _pre_decode_alignment(0),
+ _post_decode_alignment(0),
+ _print_file_name(false),
+ _print_help(false),
+ _helpPrinted(false) {
+
+ memset(_option_buf, 0, sizeof(_option_buf));
_strings.copy(c);
-
process_options(_output);
}
// Constructor for a 'decode_env' to decode a memory range [start, end)
// of unknown origin, assuming it contains code.
-decode_env::decode_env(address start, address end, outputStream* output) {
+decode_env::decode_env(address start, address end, outputStream* output) :
+ _output(output ? output : tty),
+ _codeBuffer(NULL),
+ _codeBlob(NULL),
+ _nm(NULL),
+ _strings(),
+ _start(start),
+ _end(end),
+ _option_buf(),
+ _print_raw(0),
+ _cur_insn(NULL),
+ _bytes_per_line(0),
+ _pre_decode_alignment(0),
+ _post_decode_alignment(0),
+ _print_file_name(false),
+ _print_help(false),
+ _helpPrinted(false) {
+
assert(start < end, "Range must have a positive size, [" PTR_FORMAT ".." PTR_FORMAT ").", p2i(start), p2i(end));
- memset(this, 0, sizeof(*this));
- _output = output ? output : tty;
- _codeBlob = NULL;
- _codeBuffer = NULL;
- _start = start;
- _end = end;
- _helpPrinted = false;
-
+ memset(_option_buf, 0, sizeof(_option_buf));
process_options(_output);
}
--- a/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -137,6 +137,8 @@
virtual LIR_Opr resolve(LIRGenerator* gen, DecoratorSet decorators, LIR_Opr obj);
+ virtual const char* rtcall_name_for_address(address entry) { return NULL; }
+
virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob) {}
};
--- a/src/hotspot/share/gc/shared/oopStorage.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shared/oopStorage.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -730,18 +730,12 @@
}
}
-const char* dup_name(const char* name) {
- char* dup = NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtGC);
- strcpy(dup, name);
- return dup;
-}
-
const size_t initial_active_array_size = 8;
OopStorage::OopStorage(const char* name,
Mutex* allocation_mutex,
Mutex* active_mutex) :
- _name(dup_name(name)),
+ _name(os::strdup(name)),
_active_array(ActiveArray::create(initial_active_array_size)),
_allocation_list(),
_deferred_updates(NULL),
@@ -784,7 +778,7 @@
Block::delete_block(*block);
}
ActiveArray::destroy(_active_array);
- FREE_C_HEAP_ARRAY(char, _name);
+ os::free(const_cast<char*>(_name));
}
// Managing service thread notifications.
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -35,18 +35,7 @@
ShenandoahHeuristics(),
_cycle_gap_history(new TruncatedSeq(5)),
_conc_mark_duration_history(new TruncatedSeq(5)),
- _conc_uprefs_duration_history(new TruncatedSeq(5)) {
-
- SHENANDOAH_ERGO_ENABLE_FLAG(ExplicitGCInvokesConcurrent);
- SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
-
- // Final configuration checks
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahKeepAliveBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
-}
+ _conc_uprefs_duration_history(new TruncatedSeq(5)) {}
ShenandoahAdaptiveHeuristics::~ShenandoahAdaptiveHeuristics() {}
@@ -121,7 +110,7 @@
} // Else ignore
}
-bool ShenandoahAdaptiveHeuristics::should_start_normal_gc() const {
+bool ShenandoahAdaptiveHeuristics::should_start_gc() const {
ShenandoahHeap* heap = ShenandoahHeap::heap();
size_t capacity = heap->max_capacity();
size_t available = heap->free_set()->available();
@@ -172,7 +161,7 @@
return true;
}
- return ShenandoahHeuristics::should_start_normal_gc();
+ return ShenandoahHeuristics::should_start_gc();
}
bool ShenandoahAdaptiveHeuristics::should_start_update_refs() {
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -47,7 +47,7 @@
virtual void record_phase_time(ShenandoahPhaseTimings::Phase phase, double secs);
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual bool should_start_update_refs();
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -65,7 +65,7 @@
}
}
-bool ShenandoahAggressiveHeuristics::should_start_normal_gc() const {
+bool ShenandoahAggressiveHeuristics::should_start_gc() const {
log_info(gc)("Trigger: Start next cycle immediately");
return true;
}
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -34,7 +34,7 @@
RegionData* data, size_t size,
size_t free);
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual bool should_process_references();
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -49,7 +49,7 @@
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
}
-bool ShenandoahCompactHeuristics::should_start_normal_gc() const {
+bool ShenandoahCompactHeuristics::should_start_gc() const {
ShenandoahHeap* heap = ShenandoahHeap::heap();
size_t capacity = heap->max_capacity();
@@ -77,7 +77,7 @@
return true;
}
- return ShenandoahHeuristics::should_start_normal_gc();
+ return ShenandoahHeuristics::should_start_gc();
}
void ShenandoahCompactHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -30,7 +30,7 @@
public:
ShenandoahCompactHeuristics();
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual void choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
RegionData* data, size_t size,
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -29,32 +29,7 @@
#include "logging/log.hpp"
#include "logging/logTag.hpp"
-ShenandoahPassiveHeuristics::ShenandoahPassiveHeuristics() : ShenandoahHeuristics() {
- // Do not allow concurrent cycles.
- FLAG_SET_DEFAULT(ExplicitGCInvokesConcurrent, false);
- FLAG_SET_DEFAULT(ShenandoahImplicitGCInvokesConcurrent, false);
-
- // Passive runs with max speed, reacts on allocation failure.
- FLAG_SET_DEFAULT(ShenandoahPacing, false);
-
- // No need for evacuation reserve with Full GC, only for Degenerated GC.
- if (!ShenandoahDegeneratedGC) {
- SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahEvacReserve, 0);
- }
-
- // Disable known barriers by default.
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahLoadRefBarrier);
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahSATBBarrier);
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahKeepAliveBarrier);
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahStoreValEnqueueBarrier);
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCASBarrier);
- SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCloneBarrier);
-
- // Final configuration checks
- // No barriers are required to run.
-}
-
-bool ShenandoahPassiveHeuristics::should_start_normal_gc() const {
+bool ShenandoahPassiveHeuristics::should_start_gc() const {
// Never do concurrent GCs.
return false;
}
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -28,9 +28,7 @@
class ShenandoahPassiveHeuristics : public ShenandoahHeuristics {
public:
- ShenandoahPassiveHeuristics();
-
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual bool should_process_references();
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -49,7 +49,7 @@
ShenandoahStaticHeuristics::~ShenandoahStaticHeuristics() {}
-bool ShenandoahStaticHeuristics::should_start_normal_gc() const {
+bool ShenandoahStaticHeuristics::should_start_gc() const {
ShenandoahHeap* heap = ShenandoahHeap::heap();
size_t capacity = heap->max_capacity();
@@ -61,7 +61,7 @@
available / M, threshold_available / M);
return true;
}
- return ShenandoahHeuristics::should_start_normal_gc();
+ return ShenandoahHeuristics::should_start_gc();
}
void ShenandoahStaticHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -32,7 +32,7 @@
virtual ~ShenandoahStaticHeuristics();
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual void choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
RegionData* data, size_t size,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+
+#include "gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.hpp"
+#include "gc/shenandoah/shenandoahCollectionSet.hpp"
+#include "gc/shenandoah/shenandoahFreeSet.hpp"
+#include "gc/shenandoah/shenandoahHeap.inline.hpp"
+#include "gc/shenandoah/shenandoahHeuristics.hpp"
+#include "gc/shenandoah/shenandoahTraversalGC.hpp"
+#include "logging/log.hpp"
+#include "logging/logTag.hpp"
+#include "utilities/quickSort.hpp"
+
+ShenandoahTraversalAggressiveHeuristics::ShenandoahTraversalAggressiveHeuristics() : ShenandoahHeuristics(),
+ _last_cset_select(0) {
+ // Do not shortcut evacuation
+ SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahImmediateThreshold, 100);
+
+ // Aggressive runs with max speed for allocation, to capture races against mutator
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahPacing);
+
+ // Aggressive evacuates everything, so it needs as much evac space as it can get
+ SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahEvacReserveOverflow);
+
+ // If class unloading is globally enabled, aggressive does unloading even with
+ // concurrent cycles.
+ if (ClassUnloading) {
+ SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahUnloadClassesFrequency, 1);
+ }
+
+}
+
+bool ShenandoahTraversalAggressiveHeuristics::is_experimental() {
+ return true;
+}
+
+bool ShenandoahTraversalAggressiveHeuristics::is_diagnostic() {
+ return true;
+}
+
+const char* ShenandoahTraversalAggressiveHeuristics::name() {
+ return "traversal-aggressive";
+}
+
+void ShenandoahTraversalAggressiveHeuristics::choose_collection_set(ShenandoahCollectionSet* collection_set) {
+ ShenandoahHeap* heap = ShenandoahHeap::heap();
+
+ ShenandoahTraversalGC* traversal_gc = heap->traversal_gc();
+
+ ShenandoahHeapRegionSet* traversal_set = traversal_gc->traversal_set();
+ traversal_set->clear();
+
+ RegionData *data = get_region_data_cache(heap->num_regions());
+ size_t cnt = 0;
+
+ // Step 0. Prepare all regions
+ for (size_t i = 0; i < heap->num_regions(); i++) {
+ ShenandoahHeapRegion* r = heap->get_region(i);
+ if (r->used() > 0) {
+ if (r->is_regular()) {
+ data[cnt]._region = r;
+ data[cnt]._garbage = r->garbage();
+ data[cnt]._seqnum_last_alloc = r->seqnum_last_alloc_mutator();
+ cnt++;
+ }
+ traversal_set->add_region(r);
+ }
+ }
+
+ for (size_t i = 0; i < cnt; i++) {
+ if (data[i]._seqnum_last_alloc > _last_cset_select) continue;
+
+ ShenandoahHeapRegion* r = data[i]._region;
+ assert (r->is_regular(), "should have been filtered before");
+
+ if (r->garbage() > 0) {
+ assert(!collection_set->is_in(r), "must not yet be in cset");
+ collection_set->add_region(r);
+ }
+ }
+
+ // Clear liveness data
+ // TODO: Merge it with step 0, but save live data in RegionData before.
+ for (size_t i = 0; i < heap->num_regions(); i++) {
+ ShenandoahHeapRegion* r = heap->get_region(i);
+ if (r->used() > 0) {
+ r->clear_live_data();
+ }
+ }
+
+ collection_set->update_region_status();
+
+ _last_cset_select = ShenandoahHeapRegion::seqnum_current_alloc();
+}
+
+void ShenandoahTraversalAggressiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* set,
+ RegionData* data, size_t data_size,
+ size_t free) {
+ ShouldNotReachHere();
+}
+
+bool ShenandoahTraversalAggressiveHeuristics::should_start_gc() const {
+ log_info(gc)("Trigger: Start next cycle immediately");
+ return true;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_HEURISTICS_SHENANDOAHTRAVERSALAGGRESSIVEHEURISTICS_HPP
+#define SHARE_GC_SHENANDOAH_HEURISTICS_SHENANDOAHTRAVERSALAGGRESSIVEHEURISTICS_HPP
+
+#include "gc/shenandoah/shenandoahHeuristics.hpp"
+
+class ShenandoahTraversalAggressiveHeuristics : public ShenandoahHeuristics {
+private:
+ uint64_t _last_cset_select;
+
+protected:
+ virtual void choose_collection_set_from_regiondata(ShenandoahCollectionSet* set,
+ RegionData* data, size_t data_size,
+ size_t free);
+
+public:
+ ShenandoahTraversalAggressiveHeuristics();
+
+ virtual bool is_experimental();
+
+ virtual bool is_diagnostic();
+
+ virtual const char* name();
+
+ virtual void choose_collection_set(ShenandoahCollectionSet* collection_set);
+ virtual bool should_start_gc() const;
+};
+
+#endif // SHARE_GC_SHENANDOAH_HEURISTICS_SHENANDOAHTRAVERSALAGGRESSIVEHEURISTICS_HPP
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -34,26 +34,7 @@
#include "utilities/quickSort.hpp"
ShenandoahTraversalHeuristics::ShenandoahTraversalHeuristics() : ShenandoahHeuristics(),
- _last_cset_select(0)
- {
- FLAG_SET_DEFAULT(ShenandoahSATBBarrier, false);
- FLAG_SET_DEFAULT(ShenandoahStoreValEnqueueBarrier, true);
- FLAG_SET_DEFAULT(ShenandoahKeepAliveBarrier, false);
- FLAG_SET_DEFAULT(ShenandoahAllowMixedAllocs, false);
-
- SHENANDOAH_ERGO_ENABLE_FLAG(ExplicitGCInvokesConcurrent);
- SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
-
- // Final configuration checks
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahStoreValEnqueueBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
- SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
-}
-
-bool ShenandoahTraversalHeuristics::should_start_normal_gc() const {
- return false;
-}
+ _last_cset_select(0) {}
bool ShenandoahTraversalHeuristics::is_experimental() {
return true;
@@ -63,10 +44,6 @@
return false;
}
-bool ShenandoahTraversalHeuristics::can_do_traversal_gc() {
- return true;
-}
-
const char* ShenandoahTraversalHeuristics::name() {
return "traversal";
}
@@ -202,7 +179,7 @@
_last_cset_select = ShenandoahHeapRegion::seqnum_current_alloc();
}
-bool ShenandoahTraversalHeuristics::should_start_traversal_gc() {
+bool ShenandoahTraversalHeuristics::should_start_gc() const {
ShenandoahHeap* heap = ShenandoahHeap::heap();
assert(!heap->has_forwarded_objects(), "no forwarded objects here");
@@ -251,7 +228,7 @@
log_info(gc, ergo)("Free headroom: " SIZE_FORMAT "M (free) - " SIZE_FORMAT "M (spike) - " SIZE_FORMAT "M (penalties) = " SIZE_FORMAT "M",
available / M, spike_headroom / M, penalties / M, allocation_headroom / M);
return true;
- } else if (ShenandoahHeuristics::should_start_normal_gc()) {
+ } else if (ShenandoahHeuristics::should_start_gc()) {
return true;
}
--- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -38,19 +38,15 @@
public:
ShenandoahTraversalHeuristics();
- virtual bool should_start_normal_gc() const;
-
virtual bool is_experimental();
virtual bool is_diagnostic();
- virtual bool can_do_traversal_gc();
-
virtual const char* name();
virtual void choose_collection_set(ShenandoahCollectionSet* collection_set);
- virtual bool should_start_traversal_gc();
+ virtual bool should_start_gc() const;
};
#endif // SHARE_GC_SHENANDOAH_HEURISTICS_SHENANDOAHTRAVERSALHEURISTICS_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -68,6 +68,10 @@
void ShenandoahControlThread::run_service() {
ShenandoahHeap* heap = ShenandoahHeap::heap();
+ GCMode default_mode = heap->is_traversal_mode() ?
+ concurrent_traversal : concurrent_normal;
+ GCCause::Cause default_cause = heap->is_traversal_mode() ?
+ GCCause::_shenandoah_traversal_gc : GCCause::_shenandoah_concurrent_gc;
int sleep = ShenandoahControlIntervalMin;
double last_shrink_time = os::elapsedTime();
@@ -123,11 +127,7 @@
if (ExplicitGCInvokesConcurrent) {
policy->record_explicit_to_concurrent();
- if (heuristics->can_do_traversal_gc()) {
- mode = concurrent_traversal;
- } else {
- mode = concurrent_normal;
- }
+ mode = default_mode;
// Unload and clean up everything
heap->set_process_references(heuristics->can_process_references());
heap->set_unload_classes(heuristics->can_unload_classes());
@@ -143,11 +143,7 @@
if (ShenandoahImplicitGCInvokesConcurrent) {
policy->record_implicit_to_concurrent();
- if (heuristics->can_do_traversal_gc()) {
- mode = concurrent_traversal;
- } else {
- mode = concurrent_normal;
- }
+ mode = default_mode;
// Unload and clean up everything
heap->set_process_references(heuristics->can_process_references());
@@ -158,12 +154,9 @@
}
} else {
// Potential normal cycle: ask heuristics if it wants to act
- if (heuristics->should_start_traversal_gc()) {
- mode = concurrent_traversal;
- cause = GCCause::_shenandoah_traversal_gc;
- } else if (heuristics->should_start_normal_gc()) {
- mode = concurrent_normal;
- cause = GCCause::_shenandoah_concurrent_gc;
+ if (heuristics->should_start_gc()) {
+ mode = default_mode;
+ cause = default_cause;
}
// Ask policy if this cycle wants to process references or unload classes
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -50,23 +50,20 @@
#include "gc/shenandoah/shenandoahMemoryPool.hpp"
#include "gc/shenandoah/shenandoahMetrics.hpp"
#include "gc/shenandoah/shenandoahMonitoringSupport.hpp"
+#include "gc/shenandoah/shenandoahNormalMode.hpp"
#include "gc/shenandoah/shenandoahOopClosures.inline.hpp"
#include "gc/shenandoah/shenandoahPacer.inline.hpp"
+#include "gc/shenandoah/shenandoahPassiveMode.hpp"
#include "gc/shenandoah/shenandoahRootProcessor.inline.hpp"
#include "gc/shenandoah/shenandoahStringDedup.hpp"
#include "gc/shenandoah/shenandoahTaskqueue.hpp"
+#include "gc/shenandoah/shenandoahTraversalMode.hpp"
#include "gc/shenandoah/shenandoahUtils.hpp"
#include "gc/shenandoah/shenandoahVerifier.hpp"
#include "gc/shenandoah/shenandoahCodeRoots.hpp"
#include "gc/shenandoah/shenandoahVMOperations.hpp"
#include "gc/shenandoah/shenandoahWorkGroup.hpp"
#include "gc/shenandoah/shenandoahWorkerPolicy.hpp"
-#include "gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp"
-#include "gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp"
-#include "gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp"
-#include "gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp"
-#include "gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp"
-#include "gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp"
#if INCLUDE_JFR
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
#endif
@@ -367,7 +364,7 @@
_pacer = NULL;
}
- _traversal_gc = heuristics()->can_do_traversal_gc() ?
+ _traversal_gc = strcmp(ShenandoahGCMode, "traversal") == 0 ?
new ShenandoahTraversalGC(this, _num_regions) :
NULL;
@@ -387,39 +384,34 @@
}
void ShenandoahHeap::initialize_heuristics() {
- if (ShenandoahGCHeuristics != NULL) {
- if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) {
- _heuristics = new ShenandoahAggressiveHeuristics();
- } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) {
- _heuristics = new ShenandoahStaticHeuristics();
- } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) {
- _heuristics = new ShenandoahAdaptiveHeuristics();
- } else if (strcmp(ShenandoahGCHeuristics, "passive") == 0) {
- _heuristics = new ShenandoahPassiveHeuristics();
- } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) {
- _heuristics = new ShenandoahCompactHeuristics();
- } else if (strcmp(ShenandoahGCHeuristics, "traversal") == 0) {
- _heuristics = new ShenandoahTraversalHeuristics();
+ if (ShenandoahGCMode != NULL) {
+ if (strcmp(ShenandoahGCMode, "traversal") == 0) {
+ _gc_mode = new ShenandoahTraversalMode();
+ } else if (strcmp(ShenandoahGCMode, "normal") == 0) {
+ _gc_mode = new ShenandoahNormalMode();
+ } else if (strcmp(ShenandoahGCMode, "passive") == 0) {
+ _gc_mode = new ShenandoahPassiveMode();
} else {
- vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option");
+ vm_exit_during_initialization("Unknown -XX:ShenandoahGCMode option");
}
-
- if (_heuristics->is_diagnostic() && !UnlockDiagnosticVMOptions) {
- vm_exit_during_initialization(
- err_msg("Heuristics \"%s\" is diagnostic, and must be enabled via -XX:+UnlockDiagnosticVMOptions.",
- _heuristics->name()));
- }
- if (_heuristics->is_experimental() && !UnlockExperimentalVMOptions) {
- vm_exit_during_initialization(
- err_msg("Heuristics \"%s\" is experimental, and must be enabled via -XX:+UnlockExperimentalVMOptions.",
- _heuristics->name()));
- }
- log_info(gc, init)("Shenandoah heuristics: %s",
- _heuristics->name());
} else {
- ShouldNotReachHere();
+ ShouldNotReachHere();
}
-
+ _gc_mode->initialize_flags();
+ _heuristics = _gc_mode->initialize_heuristics();
+
+ if (_heuristics->is_diagnostic() && !UnlockDiagnosticVMOptions) {
+ vm_exit_during_initialization(
+ err_msg("Heuristics \"%s\" is diagnostic, and must be enabled via -XX:+UnlockDiagnosticVMOptions.",
+ _heuristics->name()));
+ }
+ if (_heuristics->is_experimental() && !UnlockExperimentalVMOptions) {
+ vm_exit_during_initialization(
+ err_msg("Heuristics \"%s\" is experimental, and must be enabled via -XX:+UnlockExperimentalVMOptions.",
+ _heuristics->name()));
+ }
+ log_info(gc, init)("Shenandoah heuristics: %s",
+ _heuristics->name());
}
#ifdef _MSC_VER
@@ -1704,7 +1696,7 @@
set_process_references(heuristics()->can_process_references());
set_unload_classes(heuristics()->can_unload_classes());
- if (heuristics()->can_do_traversal_gc()) {
+ if (is_traversal_mode()) {
// Not possible to degenerate from here, upgrade to Full GC right away.
cancel_gc(GCCause::_shenandoah_upgrade_to_full_gc);
op_degenerated_fail();
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -43,6 +43,7 @@
class ShenandoahGCStateResetter;
class ShenandoahHeuristics;
class ShenandoahMarkingContext;
+class ShenandoahMode;
class ShenandoahPhaseTimings;
class ShenandoahHeap;
class ShenandoahHeapRegion;
@@ -435,6 +436,7 @@
private:
ShenandoahControlThread* _control_thread;
ShenandoahCollectorPolicy* _shenandoah_policy;
+ ShenandoahMode* _gc_mode;
ShenandoahHeuristics* _heuristics;
ShenandoahFreeSet* _free_set;
ShenandoahConcurrentMark* _scm;
@@ -454,7 +456,8 @@
ShenandoahHeuristics* heuristics() const { return _heuristics; }
ShenandoahFreeSet* free_set() const { return _free_set; }
ShenandoahConcurrentMark* concurrent_mark() { return _scm; }
- ShenandoahTraversalGC* traversal_gc() { return _traversal_gc; }
+ ShenandoahTraversalGC* traversal_gc() const { return _traversal_gc; }
+ bool is_traversal_mode() const { return _traversal_gc != NULL; }
ShenandoahPacer* pacer() const { return _pacer; }
ShenandoahPhaseTimings* phase_timings() const { return _phase_timings; }
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -228,7 +228,7 @@
return _update_refs_early;
}
-bool ShenandoahHeuristics::should_start_normal_gc() const {
+bool ShenandoahHeuristics::should_start_gc() const {
// Perform GC to cleanup metaspace
if (has_metaspace_oom()) {
// Some of vmTestbase/metaspace tests depend on following line to count GC cycles
@@ -245,14 +245,6 @@
return periodic_gc;
}
-bool ShenandoahHeuristics::should_start_traversal_gc() {
- return false;
-}
-
-bool ShenandoahHeuristics::can_do_traversal_gc() {
- return false;
-}
-
bool ShenandoahHeuristics::should_degenerate_cycle() {
return _degenerated_cycles_in_a_row <= ShenandoahFullGCThreshold;
}
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeuristics.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -127,14 +127,10 @@
virtual void record_phase_time(ShenandoahPhaseTimings::Phase phase, double secs);
- virtual bool should_start_normal_gc() const;
+ virtual bool should_start_gc() const;
virtual bool should_start_update_refs();
- virtual bool should_start_traversal_gc();
-
- virtual bool can_do_traversal_gc();
-
virtual bool should_degenerate_cycle();
virtual void record_success_concurrent();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahMode.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHMODE_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHMODE_HPP
+
+#include "memory/allocation.hpp"
+
+class ShenandoahHeuristics;
+
+class ShenandoahMode : public CHeapObj<mtGC> {
+public:
+ virtual void initialize_flags() const = 0;
+ virtual ShenandoahHeuristics* initialize_heuristics() const = 0;
+};
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHMODE_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/shenandoah/shenandoahNormalMode.hpp"
+#include "gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp"
+#include "gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp"
+#include "gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp"
+#include "gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp"
+#include "logging/log.hpp"
+#include "logging/logTag.hpp"
+
+void ShenandoahNormalMode::initialize_flags() const {
+ SHENANDOAH_ERGO_ENABLE_FLAG(ExplicitGCInvokesConcurrent);
+ SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
+
+ // Final configuration checks
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahKeepAliveBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
+}
+
+ShenandoahHeuristics* ShenandoahNormalMode::initialize_heuristics() const {
+ if (ShenandoahGCHeuristics != NULL) {
+ if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) {
+ return new ShenandoahAggressiveHeuristics();
+ } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) {
+ return new ShenandoahStaticHeuristics();
+ } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) {
+ return new ShenandoahAdaptiveHeuristics();
+ } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) {
+ return new ShenandoahCompactHeuristics();
+ } else {
+ vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option");
+ }
+ }
+ ShouldNotReachHere();
+ return NULL;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP
+
+#include "gc/shenandoah/shenandoahMode.hpp"
+
+class ShenandoahHeuristics;
+
+class ShenandoahNormalMode : public ShenandoahMode {
+public:
+ virtual void initialize_flags() const;
+ virtual ShenandoahHeuristics* initialize_heuristics() const;
+};
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/shenandoah/shenandoahPassiveMode.hpp"
+#include "gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp"
+#include "logging/log.hpp"
+#include "logging/logTag.hpp"
+
+void ShenandoahPassiveMode::initialize_flags() const {
+ // Do not allow concurrent cycles.
+ FLAG_SET_DEFAULT(ExplicitGCInvokesConcurrent, false);
+ FLAG_SET_DEFAULT(ShenandoahImplicitGCInvokesConcurrent, false);
+
+ // Passive runs with max speed, reacts on allocation failure.
+ FLAG_SET_DEFAULT(ShenandoahPacing, false);
+
+ // No need for evacuation reserve with Full GC, only for Degenerated GC.
+ if (!ShenandoahDegeneratedGC) {
+ SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahEvacReserve, 0);
+ }
+
+ // Disable known barriers by default.
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahLoadRefBarrier);
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahSATBBarrier);
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahKeepAliveBarrier);
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahStoreValEnqueueBarrier);
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCASBarrier);
+ SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCloneBarrier);
+
+ // Final configuration checks
+ // No barriers are required to run.
+}
+ShenandoahHeuristics* ShenandoahPassiveMode::initialize_heuristics() const {
+ if (ShenandoahGCHeuristics != NULL) {
+ return new ShenandoahPassiveHeuristics();
+ }
+ ShouldNotReachHere();
+ return NULL;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHPASSIVEMODE_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHPASSIVEMODE_HPP
+
+#include "gc/shenandoah/shenandoahNormalMode.hpp"
+
+class ShenandoahPassiveMode : public ShenandoahNormalMode {
+public:
+ virtual void initialize_flags() const;
+ virtual ShenandoahHeuristics* initialize_heuristics() const;
+};
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -225,7 +225,7 @@
void ShenandoahRootScanner<ITR>::roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure *tc) {
assert(!ShenandoahSafepoint::is_at_shenandoah_safepoint() ||
!ShenandoahHeap::heap()->unload_classes() ||
- ShenandoahHeap::heap()->heuristics()->can_do_traversal_gc(),
+ ShenandoahHeap::heap()->is_traversal_mode(),
"Expect class unloading or traversal when Shenandoah cycle is running");
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalMode.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/shenandoah/shenandoahTraversalMode.hpp"
+#include "gc/shenandoah/heuristics/shenandoahTraversalAggressiveHeuristics.hpp"
+#include "gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp"
+#include "logging/log.hpp"
+#include "logging/logTag.hpp"
+
+void ShenandoahTraversalMode::initialize_flags() const {
+ FLAG_SET_DEFAULT(ShenandoahSATBBarrier, false);
+ FLAG_SET_DEFAULT(ShenandoahStoreValEnqueueBarrier, true);
+ FLAG_SET_DEFAULT(ShenandoahKeepAliveBarrier, false);
+ FLAG_SET_DEFAULT(ShenandoahAllowMixedAllocs, false);
+
+ SHENANDOAH_ERGO_ENABLE_FLAG(ExplicitGCInvokesConcurrent);
+ SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
+
+ // Final configuration checks
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahStoreValEnqueueBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
+ SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
+}
+
+ShenandoahHeuristics* ShenandoahTraversalMode::initialize_heuristics() const {
+ if (ShenandoahGCHeuristics != NULL) {
+ if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) {
+ return new ShenandoahTraversalHeuristics();
+ } else if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) {
+ return new ShenandoahTraversalAggressiveHeuristics();
+ } else {
+ vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option");
+ }
+ }
+ ShouldNotReachHere();
+ return NULL;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalMode.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHTRAVERSALMODE_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHTRAVERSALMODE_HPP
+
+#include "gc/shenandoah/shenandoahMode.hpp"
+
+class ShenandoahHeuristics;
+
+class ShenandoahTraversalMode : public ShenandoahMode {
+public:
+ virtual void initialize_flags() const;
+ virtual ShenandoahHeuristics* initialize_heuristics() const;
+};
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHTRAVERSALMODE_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -65,13 +65,18 @@
" *) static - start concurrent GC when static free heap " \
" threshold and static allocation threshold are " \
" tripped;" \
- " *) passive - do not start concurrent GC, wait for Full GC; " \
" *) aggressive - run concurrent GC continuously, evacuate " \
" everything;" \
" *) compact - run GC with lower footprint target, may end up " \
" doing continuous GC, evacuate lots of live " \
" objects, uncommit heap aggressively;") \
\
+ experimental(ccstr, ShenandoahGCMode, "normal", \
+ "The GC mode to use in Shenandoah GC. Possible values" \
+ " *) normal - normal GC (mark-evac-update)" \
+ " *) traversal - traversal GC (single-pass)" \
+ " *) passive - disable concurrent GC, do stop-the-world GC") \
+ \
experimental(ccstr, ShenandoahUpdateRefsEarly, "adaptive", \
"Run a separate concurrent reference updating phase after" \
"concurrent evacuation. Possible values: 'on', 'off', 'adaptive'")\
--- a/src/hotspot/share/gc/z/zArguments.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zArguments.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -92,6 +92,11 @@
// same reason we need fixup_partial_loads
FLAG_SET_DEFAULT(VerifyBeforeIteration, false);
+ if (VerifyBeforeGC || VerifyDuringGC || VerifyAfterGC) {
+ FLAG_SET_DEFAULT(ZVerifyRoots, true);
+ FLAG_SET_DEFAULT(ZVerifyObjects, true);
+ }
+
// Verification of stacks not (yet) supported, for the same reason
// we need fixup_partial_loads
DEBUG_ONLY(FLAG_SET_DEFAULT(VerifyStack, false));
--- a/src/hotspot/share/gc/z/zCollectedHeap.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zCollectedHeap.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -232,11 +232,11 @@
}
void ZCollectedHeap::object_iterate(ObjectClosure* cl) {
- _heap.object_iterate(cl, true /* visit_referents */);
+ _heap.object_iterate(cl, true /* visit_weaks */);
}
void ZCollectedHeap::safe_object_iterate(ObjectClosure* cl) {
- _heap.object_iterate(cl, true /* visit_referents */);
+ _heap.object_iterate(cl, true /* visit_weaks */);
}
HeapWord* ZCollectedHeap::block_start(const void* addr) const {
--- a/src/hotspot/share/gc/z/zDriver.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zDriver.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -31,6 +31,7 @@
#include "gc/z/zMessagePort.inline.hpp"
#include "gc/z/zServiceability.hpp"
#include "gc/z/zStat.hpp"
+#include "gc/z/zVerify.hpp"
#include "logging/log.hpp"
#include "memory/universe.hpp"
#include "runtime/vmOperations.hpp"
@@ -86,6 +87,9 @@
GCIdMark gc_id_mark(_gc_id);
IsGCActiveMark gc_active_mark;
+ // Verify roots
+ ZVerify::roots_strong();
+
// Execute operation
_success = do_operation();
@@ -301,8 +305,14 @@
void ZDriver::pause_verify() {
if (VerifyBeforeGC || VerifyDuringGC || VerifyAfterGC) {
+ // Full verification
VM_Verify op;
VMThread::execute(&op);
+
+ } else if (ZVerifyRoots || ZVerifyObjects) {
+ // Limited verification
+ VM_ZVerifyOperation op;
+ VMThread::execute(&op);
}
}
--- a/src/hotspot/share/gc/z/zHeap.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zHeap.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -41,6 +41,7 @@
#include "gc/z/zTask.hpp"
#include "gc/z/zThread.hpp"
#include "gc/z/zTracer.inline.hpp"
+#include "gc/z/zVerify.hpp"
#include "gc/z/zVirtualMemory.inline.hpp"
#include "gc/z/zWorkers.inline.hpp"
#include "logging/log.hpp"
@@ -340,6 +341,9 @@
// Enter mark completed phase
ZGlobalPhase = ZPhaseMarkCompleted;
+ // Verify after mark
+ ZVerify::after_mark();
+
// Update statistics
ZStatSample(ZSamplerHeapUsedAfterMark, used());
ZStatHeap::set_at_mark_end(capacity(), allocated(), used());
@@ -468,11 +472,11 @@
used(), used_high(), used_low());
}
-void ZHeap::object_iterate(ObjectClosure* cl, bool visit_referents) {
+void ZHeap::object_iterate(ObjectClosure* cl, bool visit_weaks) {
assert(SafepointSynchronize::is_at_safepoint(), "Should be at safepoint");
ZHeapIterator iter;
- iter.objects_do(cl, visit_referents);
+ iter.objects_do(cl, visit_weaks);
}
void ZHeap::serviceability_initialize() {
@@ -518,40 +522,11 @@
st->cr();
}
-class ZVerifyRootsTask : public ZTask {
-private:
- ZStatTimerDisable _disable;
- ZRootsIterator _strong_roots;
- ZWeakRootsIterator _weak_roots;
-
-public:
- ZVerifyRootsTask() :
- ZTask("ZVerifyRootsTask"),
- _disable(),
- _strong_roots(),
- _weak_roots() {}
-
- virtual void work() {
- ZStatTimerDisable disable;
- ZVerifyOopClosure cl;
- _strong_roots.oops_do(&cl);
- _weak_roots.oops_do(&cl);
- }
-};
-
void ZHeap::verify() {
// Heap verification can only be done between mark end and
// relocate start. This is the only window where all oop are
// good and the whole heap is in a consistent state.
guarantee(ZGlobalPhase == ZPhaseMarkCompleted, "Invalid phase");
- {
- ZVerifyRootsTask task;
- _workers.run_parallel(&task);
- }
-
- {
- ZVerifyObjectClosure cl;
- object_iterate(&cl, false /* visit_referents */);
- }
+ ZVerify::after_weak_processing();
}
--- a/src/hotspot/share/gc/z/zHeap.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zHeap.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -161,7 +161,7 @@
void relocate();
// Iteration
- void object_iterate(ObjectClosure* cl, bool visit_referents);
+ void object_iterate(ObjectClosure* cl, bool visit_weaks);
// Serviceability
void serviceability_initialize();
--- a/src/hotspot/share/gc/z/zHeapIterator.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zHeapIterator.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -22,6 +22,8 @@
*/
#include "precompiled.hpp"
+#include "classfile/classLoaderData.hpp"
+#include "classfile/classLoaderDataGraph.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zGlobals.hpp"
#include "gc/z/zGranuleMap.inline.hpp"
@@ -83,7 +85,7 @@
};
template <bool VisitReferents>
-class ZHeapIteratorOopClosure : public BasicOopIterateClosure {
+class ZHeapIteratorOopClosure : public ClaimMetadataVisitingOopIterateClosure {
private:
ZHeapIterator* const _iter;
const oop _base;
@@ -98,6 +100,7 @@
public:
ZHeapIteratorOopClosure(ZHeapIterator* iter, oop base) :
+ ClaimMetadataVisitingOopIterateClosure(ClassLoaderData::_claim_other),
_iter(iter),
_base(base) {}
@@ -130,6 +133,7 @@
for (ZHeapIteratorBitMap* map; iter.next(&map);) {
delete map;
}
+ ClassLoaderDataGraph::clear_claimed_marks(ClassLoaderData::_claim_other);
}
static size_t object_index_max() {
@@ -184,15 +188,23 @@
obj->oop_iterate(&cl);
}
-template <bool VisitReferents>
+class ZHeapIterateConcurrentRootsIterator : public ZConcurrentRootsIterator {
+public:
+ ZHeapIterateConcurrentRootsIterator() :
+ ZConcurrentRootsIterator(ClassLoaderData::_claim_other) {}
+};
+
+template <bool VisitWeaks>
void ZHeapIterator::objects_do(ObjectClosure* cl) {
ZStatTimerDisable disable;
// Push roots to visit
- push_roots<ZRootsIterator, false /* Concurrent */, false /* Weak */>();
- push_roots<ZConcurrentRootsIterator, true /* Concurrent */, false /* Weak */>();
- push_roots<ZWeakRootsIterator, false /* Concurrent */, true /* Weak */>();
- push_roots<ZConcurrentWeakRootsIterator, true /* Concurrent */, true /* Weak */>();
+ push_roots<ZRootsIterator, false /* Concurrent */, false /* Weak */>();
+ push_roots<ZHeapIterateConcurrentRootsIterator, true /* Concurrent */, false /* Weak */>();
+ if (VisitWeaks) {
+ push_roots<ZWeakRootsIterator, false /* Concurrent */, true /* Weak */>();
+ push_roots<ZConcurrentWeakRootsIterator, true /* Concurrent */, true /* Weak */>();
+ }
// Drain stack
while (!_visit_stack.is_empty()) {
@@ -202,14 +214,14 @@
cl->do_object(obj);
// Push fields to visit
- push_fields<VisitReferents>(obj);
+ push_fields<VisitWeaks>(obj);
}
}
-void ZHeapIterator::objects_do(ObjectClosure* cl, bool visit_referents) {
- if (visit_referents) {
- objects_do<true /* VisitReferents */>(cl);
+void ZHeapIterator::objects_do(ObjectClosure* cl, bool visit_weaks) {
+ if (visit_weaks) {
+ objects_do<true /* VisitWeaks */>(cl);
} else {
- objects_do<false /* VisitReferents */>(cl);
+ objects_do<false /* VisitWeaks */>(cl);
}
}
--- a/src/hotspot/share/gc/z/zHeapIterator.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zHeapIterator.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -54,7 +54,7 @@
ZHeapIterator();
~ZHeapIterator();
- void objects_do(ObjectClosure* cl, bool visit_referents);
+ void objects_do(ObjectClosure* cl, bool visit_weaks);
};
#endif // SHARE_GC_Z_ZHEAPITERATOR_HPP
--- a/src/hotspot/share/gc/z/zMark.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zMark.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -22,6 +22,7 @@
*/
#include "precompiled.hpp"
+#include "classfile/classLoaderDataGraph.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zMark.inline.hpp"
#include "gc/z/zMarkCache.inline.hpp"
@@ -632,14 +633,23 @@
class ZMarkConcurrentRootsTask : public ZTask {
private:
+ SuspendibleThreadSetJoiner _sts_joiner;
ZConcurrentRootsIterator _roots;
ZMarkConcurrentRootsIteratorClosure _cl;
public:
ZMarkConcurrentRootsTask(ZMark* mark) :
ZTask("ZMarkConcurrentRootsTask"),
- _roots(true /* marking */),
- _cl() {}
+ _sts_joiner(true /* active */),
+ _roots(ClassLoaderData::_claim_strong),
+ _cl() {
+ ClassLoaderDataGraph_lock->lock();
+ ClassLoaderDataGraph::clear_claimed_marks();
+ }
+
+ ~ZMarkConcurrentRootsTask() {
+ ClassLoaderDataGraph_lock->unlock();
+ }
virtual void work() {
_roots.oops_do(&_cl);
--- a/src/hotspot/share/gc/z/zOopClosures.cpp Sun Jul 07 19:40:48 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, 2019, 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.
- */
-
-#include "precompiled.hpp"
-#include "gc/z/zHeap.hpp"
-#include "gc/z/zOopClosures.inline.hpp"
-#include "gc/z/zOop.inline.hpp"
-#include "memory/iterator.inline.hpp"
-#include "oops/access.inline.hpp"
-#include "oops/oop.inline.hpp"
-#include "runtime/safepoint.hpp"
-#include "utilities/debug.hpp"
-#include "utilities/globalDefinitions.hpp"
-
-void ZVerifyOopClosure::do_oop(oop* p) {
- guarantee(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
- guarantee(ZGlobalPhase == ZPhaseMarkCompleted, "Invalid phase");
- guarantee(!ZResurrection::is_blocked(), "Invalid phase");
-
- const oop o = RawAccess<>::oop_load(p);
- if (o != NULL) {
- const uintptr_t addr = ZOop::to_address(o);
- const uintptr_t good_addr = ZAddress::good(addr);
- guarantee(ZAddress::is_good(addr) || ZAddress::is_finalizable_good(addr),
- "Bad oop " PTR_FORMAT " found at " PTR_FORMAT ", expected " PTR_FORMAT,
- addr, p2i(p), good_addr);
- guarantee(oopDesc::is_oop(ZOop::from_address(good_addr)),
- "Bad object " PTR_FORMAT " found at " PTR_FORMAT,
- addr, p2i(p));
- }
-}
-
-void ZVerifyOopClosure::do_oop(narrowOop* p) {
- ShouldNotReachHere();
-}
-
-void ZVerifyObjectClosure::do_object(oop o) {
- ZVerifyOopClosure cl;
- o->oop_iterate(&cl);
-}
--- a/src/hotspot/share/gc/z/zOopClosures.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zOopClosures.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -46,16 +46,13 @@
};
template <bool finalizable>
-class ZMarkBarrierOopClosure : public MetadataVisitingOopIterateClosure {
+class ZMarkBarrierOopClosure : public ClaimMetadataVisitingOopIterateClosure {
public:
ZMarkBarrierOopClosure();
virtual void do_oop(oop* p);
virtual void do_oop(narrowOop* p);
- virtual void do_klass(Klass* k);
- virtual void do_cld(ClassLoaderData* cld);
-
#ifdef ASSERT
virtual bool should_verify_oops() {
return false;
@@ -80,26 +77,4 @@
virtual void do_oop(narrowOop* p);
};
-class ZVerifyOopClosure : public ZRootsIteratorClosure, public BasicOopIterateClosure {
-public:
- virtual void do_oop(oop* p);
- virtual void do_oop(narrowOop* p);
-
- virtual ReferenceIterationMode reference_iteration_mode() {
- return DO_FIELDS;
- }
-
-#ifdef ASSERT
- // Verification handled by the closure itself
- virtual bool should_verify_oops() {
- return false;
- }
-#endif
-};
-
-class ZVerifyObjectClosure : public ObjectClosure {
-public:
- virtual void do_object(oop o);
-};
-
#endif // SHARE_GC_Z_ZOOPCLOSURES_HPP
--- a/src/hotspot/share/gc/z/zOopClosures.inline.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zOopClosures.inline.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -55,7 +55,12 @@
template <bool finalizable>
inline ZMarkBarrierOopClosure<finalizable>::ZMarkBarrierOopClosure() :
- MetadataVisitingOopIterateClosure(finalizable ? NULL : ZHeap::heap()->reference_discoverer()) {}
+ ClaimMetadataVisitingOopIterateClosure(finalizable
+ ? ClassLoaderData::_claim_finalizable
+ : ClassLoaderData::_claim_strong,
+ finalizable
+ ? NULL
+ : ZHeap::heap()->reference_discoverer()) {}
template <bool finalizable>
inline void ZMarkBarrierOopClosure<finalizable>::do_oop(oop* p) {
@@ -67,18 +72,6 @@
ShouldNotReachHere();
}
-template <bool finalizable>
-inline void ZMarkBarrierOopClosure<finalizable>::do_klass(Klass* k) {
- ClassLoaderData* const cld = k->class_loader_data();
- ZMarkBarrierOopClosure<finalizable>::do_cld(cld);
-}
-
-template <bool finalizable>
-inline void ZMarkBarrierOopClosure<finalizable>::do_cld(ClassLoaderData* cld) {
- const int claim = finalizable ? ClassLoaderData::_claim_finalizable : ClassLoaderData::_claim_strong;
- cld->oops_do(this, claim);
-}
-
inline bool ZPhantomIsAliveObjectClosure::do_object_b(oop o) {
return ZBarrier::is_alive_barrier_on_phantom_oop(o);
}
--- a/src/hotspot/share/gc/z/zRootsIterator.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zRootsIterator.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -262,24 +262,16 @@
}
}
-ZConcurrentRootsIterator::ZConcurrentRootsIterator(bool marking) :
- _marking(marking),
- _sts_joiner(marking /* active */),
+ZConcurrentRootsIterator::ZConcurrentRootsIterator(int cld_claim) :
_jni_handles_iter(JNIHandles::global_handles()),
+ _cld_claim(cld_claim),
_jni_handles(this),
_class_loader_data_graph(this) {
ZStatTimer timer(ZSubPhaseConcurrentRootsSetup);
- if (_marking) {
- ClassLoaderDataGraph_lock->lock();
- ClassLoaderDataGraph::clear_claimed_marks();
- }
}
ZConcurrentRootsIterator::~ZConcurrentRootsIterator() {
ZStatTimer timer(ZSubPhaseConcurrentRootsTeardown);
- if (_marking) {
- ClassLoaderDataGraph_lock->unlock();
- }
}
void ZConcurrentRootsIterator::do_jni_handles(ZRootsIteratorClosure* cl) {
@@ -289,13 +281,8 @@
void ZConcurrentRootsIterator::do_class_loader_data_graph(ZRootsIteratorClosure* cl) {
ZStatTimer timer(ZSubPhaseConcurrentRootsClassLoaderDataGraph);
- if (_marking) {
- CLDToOopClosure cld_cl(cl, ClassLoaderData::_claim_strong);
- ClassLoaderDataGraph::always_strong_cld_do(&cld_cl);
- } else {
- CLDToOopClosure cld_cl(cl, ClassLoaderData::_claim_none);
- ClassLoaderDataGraph::cld_do(&cld_cl);
- }
+ CLDToOopClosure cld_cl(cl, _cld_claim);
+ ClassLoaderDataGraph::always_strong_cld_do(&cld_cl);
}
void ZConcurrentRootsIterator::oops_do(ZRootsIteratorClosure* cl) {
--- a/src/hotspot/share/gc/z/zRootsIterator.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/zRootsIterator.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -111,9 +111,8 @@
class ZConcurrentRootsIterator {
private:
- const bool _marking;
- SuspendibleThreadSetJoiner _sts_joiner;
ZOopStorageIterator _jni_handles_iter;
+ int _cld_claim;
void do_jni_handles(ZRootsIteratorClosure* cl);
void do_class_loader_data_graph(ZRootsIteratorClosure* cl);
@@ -122,7 +121,7 @@
ZParallelOopsDo<ZConcurrentRootsIterator, &ZConcurrentRootsIterator::do_class_loader_data_graph> _class_loader_data_graph;
public:
- ZConcurrentRootsIterator(bool marking = false);
+ ZConcurrentRootsIterator(int cld_claim);
~ZConcurrentRootsIterator();
void oops_do(ZRootsIteratorClosure* cl);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zVerify.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+
+#include "precompiled.hpp"
+#include "classfile/classLoaderData.hpp"
+#include "classfile/classLoaderDataGraph.hpp"
+#include "gc/z/zAddress.hpp"
+#include "gc/z/zHeap.inline.hpp"
+#include "gc/z/zOop.hpp"
+#include "gc/z/zResurrection.hpp"
+#include "gc/z/zRootsIterator.hpp"
+#include "gc/z/zStat.hpp"
+#include "gc/z/zVerify.hpp"
+#include "memory/allocation.hpp"
+#include "memory/iterator.inline.hpp"
+#include "oops/oop.inline.hpp"
+
+#define BAD_OOP_REPORT(addr) \
+ "Bad oop " PTR_FORMAT " found at " PTR_FORMAT ", expected " PTR_FORMAT, \
+ addr, p2i(p), ZAddress::good(addr)
+
+class ZVerifyRootsClosure : public ZRootsIteratorClosure {
+public:
+ virtual void do_oop(oop* p) {
+ uintptr_t value = ZOop::to_address(*p);
+
+ if (value == 0) {
+ return;
+ }
+
+ guarantee(!ZAddress::is_finalizable(value), BAD_OOP_REPORT(value));
+ guarantee(ZAddress::is_good(value), BAD_OOP_REPORT(value));
+ guarantee(oopDesc::is_oop(ZOop::from_address(value)), BAD_OOP_REPORT(value));
+ }
+ virtual void do_oop(narrowOop*) { ShouldNotReachHere(); }
+};
+
+template <bool VisitReferents>
+class ZVerifyOopClosure : public ClaimMetadataVisitingOopIterateClosure, public ZRootsIteratorClosure {
+public:
+ ZVerifyOopClosure() :
+ ClaimMetadataVisitingOopIterateClosure(ClassLoaderData::_claim_other) {}
+
+ virtual void do_oop(oop* p);
+ virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); }
+
+ virtual ReferenceIterationMode reference_iteration_mode() {
+ return VisitReferents ? DO_FIELDS : DO_FIELDS_EXCEPT_REFERENT;
+ }
+
+#ifdef ASSERT
+ // Verification handled by the closure itself
+ virtual bool should_verify_oops() {
+ return false;
+ }
+#endif
+};
+
+class ZVerifyObjectClosure : public ObjectClosure {
+private:
+ bool _visit_referents;
+
+public:
+ ZVerifyObjectClosure(bool visit_referents) : _visit_referents(visit_referents) {}
+ virtual void do_object(oop o);
+};
+
+template <typename RootsIterator>
+void ZVerify::roots_impl() {
+ if (ZVerifyRoots) {
+ ZVerifyRootsClosure cl;
+ RootsIterator iter;
+ iter.oops_do(&cl);
+ }
+}
+
+void ZVerify::roots_strong() {
+ roots_impl<ZRootsIterator>();
+}
+
+class ZVerifyConcurrentRootsIterator : public ZConcurrentRootsIterator {
+public:
+ ZVerifyConcurrentRootsIterator()
+ : ZConcurrentRootsIterator(ClassLoaderData::_claim_none) {}
+};
+
+void ZVerify::roots_concurrent() {
+ roots_impl<ZVerifyConcurrentRootsIterator>();
+}
+
+void ZVerify::roots_weak() {
+ assert(!ZResurrection::is_blocked(), "Invalid phase");
+
+ roots_impl<ZWeakRootsIterator>();
+}
+
+void ZVerify::roots(bool verify_weaks) {
+ roots_strong();
+ roots_concurrent();
+ if (verify_weaks) {
+ roots_weak();
+ roots_concurrent_weak();
+ }
+}
+
+void ZVerify::objects(bool verify_weaks) {
+ if (ZVerifyObjects) {
+ ZVerifyObjectClosure cl(verify_weaks);
+ ZHeap::heap()->object_iterate(&cl, verify_weaks);
+ }
+}
+
+void ZVerify::roots_concurrent_weak() {
+ assert(!ZResurrection::is_blocked(), "Invalid phase");
+
+ roots_impl<ZConcurrentWeakRootsIterator>();
+}
+
+void ZVerify::roots_and_objects(bool verify_weaks) {
+ ZStatTimerDisable _disable;
+
+ roots(verify_weaks);
+ objects(verify_weaks);
+}
+
+void ZVerify::after_mark() {
+ // Only verify strong roots and references.
+ roots_and_objects(false /* verify_weaks */);
+}
+
+void ZVerify::after_weak_processing() {
+ // Also verify weaks - all should have been processed at this point.
+ roots_and_objects(true /* verify_weaks */);
+}
+
+template <bool VisitReferents>
+void ZVerifyOopClosure<VisitReferents>::do_oop(oop* p) {
+ guarantee(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
+ guarantee(ZGlobalPhase == ZPhaseMarkCompleted, "Invalid phase");
+ guarantee(!ZResurrection::is_blocked(), "Invalid phase");
+
+ const oop o = RawAccess<>::oop_load(p);
+ if (o == NULL) {
+ return;
+ }
+
+ const uintptr_t addr = ZOop::to_address(o);
+ if (VisitReferents) {
+ guarantee(ZAddress::is_good(addr) || ZAddress::is_finalizable_good(addr), BAD_OOP_REPORT(addr));
+ } else {
+ // Should not encounter finalizable oops through strong-only paths. Assumes only strong roots are visited.
+ guarantee(ZAddress::is_good(addr), BAD_OOP_REPORT(addr));
+ }
+
+ const uintptr_t good_addr = ZAddress::good(addr);
+ guarantee(oopDesc::is_oop(ZOop::from_address(good_addr)), BAD_OOP_REPORT(addr));
+}
+
+void ZVerifyObjectClosure::do_object(oop o) {
+ if (_visit_referents) {
+ ZVerifyOopClosure<true /* VisitReferents */> cl;
+ o->oop_iterate((OopIterateClosure*)&cl);
+ } else {
+ ZVerifyOopClosure<false /* VisitReferents */> cl;
+ o->oop_iterate(&cl);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/z/zVerify.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+
+#ifndef SHARE_GC_Z_ZVERIFY_HPP
+#define SHARE_GC_Z_ZVERIFY_HPP
+
+#include "memory/allocation.hpp"
+
+class ZVerify : public AllStatic {
+private:
+ template <typename RootsIterator>
+ static void roots_impl();
+ static void roots(bool verify_weaks);
+
+ static void roots_weak();
+ static void roots_concurrent();
+ static void roots_concurrent_weak();
+
+ static void objects(bool verify_weaks);
+
+ static void roots_and_objects(bool visit_weaks);
+
+public:
+ // Verify strong (non-concurrent) roots. Should always be good.
+ static void roots_strong();
+
+ // Verify all strong roots and references after marking.
+ static void after_mark();
+
+ // Verify strong and weak roots and references.
+ static void after_weak_processing();
+};
+
+class VM_ZVerifyOperation : public VM_Operation {
+public:
+ virtual bool needs_inactive_gc_locker() const {
+ // An inactive GC locker is needed in operations where we change the bad
+ // mask or move objects. Changing the bad mask will invalidate all oops,
+ // which makes it conceptually the same thing as moving all objects.
+ return false;
+ }
+
+ virtual void doit() {
+ ZVerify::after_weak_processing();
+ }
+
+ bool success() const {
+ return true;
+ }
+
+ virtual VMOp_Type type() const { return VMOp_ZVerify; }
+};
+
+#endif // SHARE_GC_Z_ZVERIFY_HPP
--- a/src/hotspot/share/gc/z/z_globals.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/gc/z/z_globals.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -76,6 +76,12 @@
diagnostic(bool, ZVerifyViews, false, \
"Verify heap view accesses") \
\
+ diagnostic(bool, ZVerifyRoots, trueInDebug, \
+ "Verify roots") \
+ \
+ diagnostic(bool, ZVerifyObjects, false, \
+ "Verify objects") \
+ \
diagnostic(bool, ZVerifyMarking, false, \
"Verify marking stacks") \
\
--- a/src/hotspot/share/memory/iterator.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/memory/iterator.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -144,18 +144,28 @@
void do_cld(ClassLoaderData* cld);
};
-// The base class for all concurrent marking closures,
-// that participates in class unloading.
-// It's used to proxy through the metadata to the oops defined in them.
-class MetadataVisitingOopIterateClosure: public OopIterateClosure {
+class ClaimMetadataVisitingOopIterateClosure : public OopIterateClosure {
+ protected:
+ const int _claim;
+
public:
- MetadataVisitingOopIterateClosure(ReferenceDiscoverer* rd = NULL) : OopIterateClosure(rd) { }
+ ClaimMetadataVisitingOopIterateClosure(int claim, ReferenceDiscoverer* rd = NULL) :
+ OopIterateClosure(rd),
+ _claim(claim) { }
virtual bool do_metadata() { return true; }
virtual void do_klass(Klass* k);
virtual void do_cld(ClassLoaderData* cld);
};
+// The base class for all concurrent marking closures,
+// that participates in class unloading.
+// It's used to proxy through the metadata to the oops defined in them.
+class MetadataVisitingOopIterateClosure: public ClaimMetadataVisitingOopIterateClosure {
+ public:
+ MetadataVisitingOopIterateClosure(ReferenceDiscoverer* rd = NULL);
+};
+
// ObjectClosure is used for iterating through an object space
class ObjectClosure : public Closure {
--- a/src/hotspot/share/memory/iterator.inline.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/memory/iterator.inline.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -39,13 +39,17 @@
#include "oops/typeArrayKlass.inline.hpp"
#include "utilities/debug.hpp"
-inline void MetadataVisitingOopIterateClosure::do_cld(ClassLoaderData* cld) {
- cld->oops_do(this, ClassLoaderData::_claim_strong);
+// Defaults to strong claiming.
+inline MetadataVisitingOopIterateClosure::MetadataVisitingOopIterateClosure(ReferenceDiscoverer* rd) :
+ ClaimMetadataVisitingOopIterateClosure(ClassLoaderData::_claim_strong, rd) {}
+
+inline void ClaimMetadataVisitingOopIterateClosure::do_cld(ClassLoaderData* cld) {
+ cld->oops_do(this, _claim);
}
-inline void MetadataVisitingOopIterateClosure::do_klass(Klass* k) {
+inline void ClaimMetadataVisitingOopIterateClosure::do_klass(Klass* k) {
ClassLoaderData* cld = k->class_loader_data();
- MetadataVisitingOopIterateClosure::do_cld(cld);
+ ClaimMetadataVisitingOopIterateClosure::do_cld(cld);
}
#ifdef ASSERT
--- a/src/hotspot/share/memory/metaspace.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/memory/metaspace.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -584,6 +584,11 @@
// unlike print_report() is guaranteed not to lock or to walk the CLDG.
void MetaspaceUtils::print_basic_report(outputStream* out, size_t scale) {
+ if (!Metaspace::initialized()) {
+ out->print_cr("Metaspace not yet initialized.");
+ return;
+ }
+
out->cr();
out->print_cr("Usage:");
@@ -672,6 +677,11 @@
void MetaspaceUtils::print_report(outputStream* out, size_t scale, int flags) {
+ if (!Metaspace::initialized()) {
+ out->print_cr("Metaspace not yet initialized.");
+ return;
+ }
+
const bool print_loaders = (flags & rf_show_loaders) > 0;
const bool print_classes = (flags & rf_show_classes) > 0;
const bool print_by_chunktype = (flags & rf_break_down_by_chunktype) > 0;
@@ -959,6 +969,8 @@
ChunkManager* Metaspace::_chunk_manager_metadata = NULL;
ChunkManager* Metaspace::_chunk_manager_class = NULL;
+bool Metaspace::_initialized = false;
+
#define VIRTUALSPACEMULTIPLIER 2
#ifdef _LP64
@@ -1285,6 +1297,9 @@
}
_tracer = new MetaspaceTracer();
+
+ _initialized = true;
+
}
void Metaspace::post_initialize() {
--- a/src/hotspot/share/memory/metaspace.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/memory/metaspace.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -140,6 +140,8 @@
static const MetaspaceTracer* _tracer;
+ static bool _initialized;
+
public:
static metaspace::VirtualSpaceList* space_list() { return _space_list; }
static metaspace::VirtualSpaceList* class_space_list() { return _class_space_list; }
@@ -225,6 +227,8 @@
return mdType == ClassType && using_class_space();
}
+ static bool initialized() { return _initialized; }
+
};
// Manages the metaspace portion belonging to a class loader
--- a/src/hotspot/share/oops/methodData.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/oops/methodData.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -1607,11 +1607,14 @@
bool MethodData::profile_unsafe(const methodHandle& m, int bci) {
Bytecode_invoke inv(m , bci);
- if (inv.is_invokevirtual() && inv.klass() == vmSymbols::jdk_internal_misc_Unsafe()) {
- ResourceMark rm;
- char* name = inv.name()->as_C_string();
- if (!strncmp(name, "get", 3) || !strncmp(name, "put", 3)) {
- return true;
+ if (inv.is_invokevirtual()) {
+ if (inv.klass() == vmSymbols::jdk_internal_misc_Unsafe() ||
+ inv.klass() == vmSymbols::sun_misc_Unsafe()) {
+ ResourceMark rm;
+ char* name = inv.name()->as_C_string();
+ if (!strncmp(name, "get", 3) || !strncmp(name, "put", 3)) {
+ return true;
+ }
}
}
return false;
--- a/src/hotspot/share/opto/addnode.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/addnode.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -929,3 +929,91 @@
// Otherwise just MIN them bits.
return TypeInt::make( MIN2(r0->_lo,r1->_lo), MIN2(r0->_hi,r1->_hi), MAX2(r0->_widen,r1->_widen) );
}
+
+//------------------------------add_ring---------------------------------------
+const Type *MinFNode::add_ring( const Type *t0, const Type *t1 ) const {
+ const TypeF *r0 = t0->is_float_constant();
+ const TypeF *r1 = t1->is_float_constant();
+
+ if (r0->is_nan()) {
+ return r0;
+ }
+ if (r1->is_nan()) {
+ return r1;
+ }
+
+ float f0 = r0->getf();
+ float f1 = r1->getf();
+ if (f0 != 0.0f || f1 != 0.0f) {
+ return f0 < f1 ? r0 : r1;
+ }
+
+ // handle min of 0.0, -0.0 case.
+ return (jint_cast(f0) < jint_cast(f1)) ? r0 : r1;
+}
+
+//------------------------------add_ring---------------------------------------
+const Type *MinDNode::add_ring( const Type *t0, const Type *t1 ) const {
+ const TypeD *r0 = t0->is_double_constant();
+ const TypeD *r1 = t1->is_double_constant();
+
+ if (r0->is_nan()) {
+ return r0;
+ }
+ if (r1->is_nan()) {
+ return r1;
+ }
+
+ double d0 = r0->getd();
+ double d1 = r1->getd();
+ if (d0 != 0.0 || d1 != 0.0) {
+ return d0 < d1 ? r0 : r1;
+ }
+
+ // handle min of 0.0, -0.0 case.
+ return (jlong_cast(d0) < jlong_cast(d1)) ? r0 : r1;
+}
+
+//------------------------------add_ring---------------------------------------
+const Type *MaxFNode::add_ring( const Type *t0, const Type *t1 ) const {
+ const TypeF *r0 = t0->is_float_constant();
+ const TypeF *r1 = t1->is_float_constant();
+
+ if (r0->is_nan()) {
+ return r0;
+ }
+ if (r1->is_nan()) {
+ return r1;
+ }
+
+ float f0 = r0->getf();
+ float f1 = r1->getf();
+ if (f0 != 0.0f || f1 != 0.0f) {
+ return f0 > f1 ? r0 : r1;
+ }
+
+ // handle max of 0.0,-0.0 case.
+ return (jint_cast(f0) > jint_cast(f1)) ? r0 : r1;
+}
+
+//------------------------------add_ring---------------------------------------
+const Type *MaxDNode::add_ring( const Type *t0, const Type *t1 ) const {
+ const TypeD *r0 = t0->is_double_constant();
+ const TypeD *r1 = t1->is_double_constant();
+
+ if (r0->is_nan()) {
+ return r0;
+ }
+ if (r1->is_nan()) {
+ return r1;
+ }
+
+ double d0 = r0->getd();
+ double d1 = r1->getd();
+ if (d0 != 0.0 || d1 != 0.0) {
+ return d0 > d1 ? r0 : r1;
+ }
+
+ // handle max of 0.0, -0.0 case.
+ return (jlong_cast(d0) > jlong_cast(d1)) ? r0 : r1;
+}
--- a/src/hotspot/share/opto/addnode.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/addnode.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -255,7 +255,7 @@
public:
MaxFNode(Node *in1, Node *in2) : MaxNode(in1, in2) {}
virtual int Opcode() const;
- virtual const Type *add_ring(const Type*, const Type*) const { return Type::FLOAT; }
+ virtual const Type *add_ring(const Type*, const Type*) const;
virtual const Type *add_id() const { return TypeF::NEG_INF; }
virtual const Type *bottom_type() const { return Type::FLOAT; }
virtual uint ideal_reg() const { return Op_RegF; }
@@ -267,7 +267,7 @@
public:
MinFNode(Node *in1, Node *in2) : MaxNode(in1, in2) {}
virtual int Opcode() const;
- virtual const Type *add_ring(const Type*, const Type*) const { return Type::FLOAT; }
+ virtual const Type *add_ring(const Type*, const Type*) const;
virtual const Type *add_id() const { return TypeF::POS_INF; }
virtual const Type *bottom_type() const { return Type::FLOAT; }
virtual uint ideal_reg() const { return Op_RegF; }
@@ -279,7 +279,7 @@
public:
MaxDNode(Node *in1, Node *in2) : MaxNode(in1, in2) {}
virtual int Opcode() const;
- virtual const Type *add_ring(const Type*, const Type*) const { return Type::DOUBLE; }
+ virtual const Type *add_ring(const Type*, const Type*) const;
virtual const Type *add_id() const { return TypeD::NEG_INF; }
virtual const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -291,7 +291,7 @@
public:
MinDNode(Node *in1, Node *in2) : MaxNode(in1, in2) {}
virtual int Opcode() const;
- virtual const Type *add_ring(const Type*, const Type*) const { return Type::DOUBLE; }
+ virtual const Type *add_ring(const Type*, const Type*) const;
virtual const Type *add_id() const { return TypeD::POS_INF; }
virtual const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
--- a/src/hotspot/share/opto/compile.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/compile.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -465,7 +465,6 @@
compile->set_type_dict(NULL);
compile->set_clone_map(new Dict(cmpkey, hashkey, _compile->comp_arena()));
compile->clone_map().set_clone_idx(0);
- compile->set_type_hwm(NULL);
compile->set_type_last_size(0);
compile->set_last_tf(NULL, NULL);
compile->set_indexSet_arena(NULL);
--- a/src/hotspot/share/opto/compile.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/compile.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -478,7 +478,6 @@
Arena* _type_arena; // Alias for _Compile_types except in Initialize_shared()
Dict* _type_dict; // Intern table
CloneMap _clone_map; // used for recording history of cloned nodes
- void* _type_hwm; // Last allocation (see Type::operator new/delete)
size_t _type_last_size; // Last allocation size (see Type::operator new/delete)
ciMethod* _last_tf_m; // Cache for
const TypeFunc* _last_tf; // TypeFunc::make
@@ -977,14 +976,12 @@
// Type management
Arena* type_arena() { return _type_arena; }
Dict* type_dict() { return _type_dict; }
- void* type_hwm() { return _type_hwm; }
size_t type_last_size() { return _type_last_size; }
int num_alias_types() { return _num_alias_types; }
void init_type_arena() { _type_arena = &_Compile_types; }
void set_type_arena(Arena* a) { _type_arena = a; }
void set_type_dict(Dict* d) { _type_dict = d; }
- void set_type_hwm(void* p) { _type_hwm = p; }
void set_type_last_size(size_t sz) { _type_last_size = sz; }
const TypeFunc* last_tf(ciMethod* m) {
--- a/src/hotspot/share/opto/escape.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/escape.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -350,6 +350,12 @@
if (n_ptn != NULL)
return; // No need to redefine PointsTo node during first iteration.
+ int opcode = n->Opcode();
+ bool gc_handled = BarrierSet::barrier_set()->barrier_set_c2()->escape_add_to_con_graph(this, igvn, delayed_worklist, n, opcode);
+ if (gc_handled) {
+ return; // Ignore node if already handled by GC.
+ }
+
if (n->is_Call()) {
// Arguments to allocation and locking don't escape.
if (n->is_AbstractLock()) {
@@ -382,11 +388,6 @@
if (n_ptn == phantom_obj || n_ptn == null_obj)
return; // Skip predefined nodes.
- int opcode = n->Opcode();
- bool gc_handled = BarrierSet::barrier_set()->barrier_set_c2()->escape_add_to_con_graph(this, igvn, delayed_worklist, n, opcode);
- if (gc_handled) {
- return; // Ignore node if already handled by GC.
- }
switch (opcode) {
case Op_AddP: {
Node* base = get_addp_base(n);
--- a/src/hotspot/share/opto/escape.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/escape.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -333,7 +333,6 @@
bool _verify; // verify graph
- JavaObjectNode* phantom_obj; // Unknown object
JavaObjectNode* null_obj;
Node* _pcmp_neq; // ConI(#CC_GT)
Node* _pcmp_eq; // ConI(#CC_EQ)
@@ -343,6 +342,10 @@
Unique_Node_List ideal_nodes; // Used by CG construction and types splitting.
+public:
+ JavaObjectNode* phantom_obj; // Unknown object
+
+private:
// Address of an element in _nodes. Used when the element is to be modified
PointsToNode* ptnode_adr(int idx) const {
// There should be no new ideal nodes during ConnectionGraph build,
@@ -365,12 +368,6 @@
// Add PointsToNode node corresponding to a call
void add_call_node(CallNode* call);
- // Map ideal node to existing PointsTo node (usually phantom_object).
- void map_ideal_node(Node *n, PointsToNode* ptn) {
- assert(ptn != NULL, "only existing PointsTo node");
- _nodes.at_put(n->_idx, ptn);
- }
-
// Create PointsToNode node and add it to Connection Graph.
void add_node_to_connection_graph(Node *n, Unique_Node_List *delayed_worklist);
@@ -594,6 +591,12 @@
add_edge(ptnode_adr(n->_idx), ptn);
}
+ // Map ideal node to existing PointsTo node (usually phantom_object).
+ void map_ideal_node(Node *n, PointsToNode* ptn) {
+ assert(ptn != NULL, "only existing PointsTo node");
+ _nodes.at_put(n->_idx, ptn);
+ }
+
void add_to_congraph_unsafe_access(Node* n, uint opcode, Unique_Node_List* delayed_worklist);
bool add_final_edges_unsafe_access(Node* n, uint opcode);
--- a/src/hotspot/share/opto/library_call.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/library_call.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -6706,9 +6706,6 @@
fatal_unexpected_iid(id);
break;
}
- if (a->is_Con() || b->is_Con()) {
- return false;
- }
switch (id) {
case vmIntrinsics::_maxF: n = new MaxFNode(a, b); break;
case vmIntrinsics::_minF: n = new MinFNode(a, b); break;
--- a/src/hotspot/share/opto/type.cpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/type.cpp Sun Jul 07 20:28:41 2019 -0400
@@ -411,18 +411,8 @@
}
#define SMALLINT ((juint)3) // a value too insignificant to consider widening
-
-static double pos_dinf() {
- union { int64_t i; double d; } v;
- v.i = CONST64(0x7ff0000000000000);
- return v.d;
-}
-
-static float pos_finf() {
- union { int32_t i; float f; } v;
- v.i = 0x7f800000;
- return v.f;
-}
+#define POSITIVE_INFINITE_F 0x7f800000 // hex representation for IEEE 754 single precision positive infinite
+#define POSITIVE_INFINITE_D 0x7ff0000000000000 // hex representation for IEEE 754 double precision positive infinite
//--------------------------Initialize_shared----------------------------------
void Type::Initialize_shared(Compile* current) {
@@ -453,13 +443,13 @@
TypeF::ZERO = TypeF::make(0.0); // Float 0 (positive zero)
TypeF::ONE = TypeF::make(1.0); // Float 1
- TypeF::POS_INF = TypeF::make(pos_finf());
- TypeF::NEG_INF = TypeF::make(-pos_finf());
+ TypeF::POS_INF = TypeF::make(jfloat_cast(POSITIVE_INFINITE_F));
+ TypeF::NEG_INF = TypeF::make(-jfloat_cast(POSITIVE_INFINITE_F));
TypeD::ZERO = TypeD::make(0.0); // Double 0 (positive zero)
TypeD::ONE = TypeD::make(1.0); // Double 1
- TypeD::POS_INF = TypeD::make(pos_dinf());
- TypeD::NEG_INF = TypeD::make(-pos_dinf());
+ TypeD::POS_INF = TypeD::make(jdouble_cast(POSITIVE_INFINITE_D));
+ TypeD::NEG_INF = TypeD::make(-jdouble_cast(POSITIVE_INFINITE_D));
TypeInt::MINUS_1 = TypeInt::make(-1); // -1
TypeInt::ZERO = TypeInt::make( 0); // 0
--- a/src/hotspot/share/opto/type.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/opto/type.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -184,9 +184,7 @@
inline void* operator new( size_t x ) throw() {
Compile* compile = Compile::current();
compile->set_type_last_size(x);
- void *temp = compile->type_arena()->Amalloc_D(x);
- compile->set_type_hwm(temp);
- return temp;
+ return compile->type_arena()->Amalloc_D(x);
}
inline void operator delete( void* ptr ) {
Compile* compile = Compile::current();
--- a/src/hotspot/share/runtime/vmOperations.hpp Sun Jul 07 19:40:48 2019 -0400
+++ b/src/hotspot/share/runtime/vmOperations.hpp Sun Jul 07 20:28:41 2019 -0400
@@ -72,6 +72,7 @@
template(ZMarkStart) \
template(ZMarkEnd) \
template(ZRelocateStart) \
+ template(ZVerify) \
template(HandshakeOneThread) \
template(HandshakeAllThreads) \
template(HandshakeFallback) \
--- a/src/java.base/share/classes/java/lang/Class.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/java/lang/Class.java Sun Jul 07 20:28:41 2019 -0400
@@ -3491,9 +3491,17 @@
* Returns true if and only if this class was declared as an enum in the
* source code.
*
+ * Note that if an enum constant is declared with a class body,
+ * the class of that enum constant object is an anonymous class
+ * and <em>not</em> the class of the declaring enum type. The
+ * {@link Enum#getDeclaringClass} method of an enum constant can
+ * be used to get the class of the enum type declaring the
+ * constant.
+ *
* @return true if and only if this class was declared as an enum in the
* source code
* @since 1.5
+ * @jls 8.9.1 Enum Constants
*/
public boolean isEnum() {
// An enum must both directly extend java.lang.Enum and have
--- a/src/java.base/share/classes/java/net/Inet6AddressImpl.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/java/net/Inet6AddressImpl.java Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -25,6 +25,8 @@
package java.net;
import java.io.IOException;
+
+import static java.net.InetAddress.IPv6;
import static java.net.InetAddress.PREFER_IPV6_VALUE;
import static java.net.InetAddress.PREFER_SYSTEM_VALUE;
@@ -70,7 +72,7 @@
* stack system).
*/
java.util.Enumeration<InetAddress> it = netif.getInetAddresses();
- InetAddress inetaddr = null;
+ InetAddress inetaddr;
while (it.hasMoreElements()) {
inetaddr = it.nextElement();
if (inetaddr.getClass().isInstance(addr)) {
@@ -110,20 +112,23 @@
boolean preferIPv6Address =
InetAddress.preferIPv6Address == PREFER_IPV6_VALUE ||
InetAddress.preferIPv6Address == PREFER_SYSTEM_VALUE;
- InetAddress loopback4 = (new Inet4AddressImpl()).loopbackAddress();
- InetAddress loopback6 = new Inet6Address("localhost",
- new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01});
- // Order the candidate addresses by preference.
- InetAddress[] addresses = preferIPv6Address
- ? new InetAddress[] {loopback6, loopback4}
- : new InetAddress[] {loopback4, loopback6};
- // In case of failure, default to the preferred address.
- loopbackAddress = addresses[0];
- // Pick the first candidate address that actually exists.
- for (InetAddress address : addresses) {
+
+ for (int i = 0; i < 2; i++) {
+ InetAddress address;
+ // Order the candidate addresses by preference.
+ if (i == (preferIPv6Address ? 0 : 1)) {
+ address = new Inet6Address("localhost",
+ new byte[]{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01});
+ } else {
+ address = new Inet4Address("localhost", new byte[]{ 0x7f,0x00,0x00,0x01 });
+ }
+ if (i == 0) {
+ // In case of failure, default to the preferred address.
+ loopbackAddress = address;
+ }
try {
- if (NetworkInterface.getByInetAddress(address) == null) {
+ if (!NetworkInterface.isBoundInetAddress(address)) {
continue;
}
} catch (SocketException e) {
--- a/src/java.base/share/classes/java/net/InetAddress.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/java/net/InetAddress.java Sun Jul 07 20:28:41 2019 -0400
@@ -290,7 +290,7 @@
}
/* Used to store the name service provider */
- private static transient NameService nameService = null;
+ private static transient NameService nameService;
/**
* Used to store the best available hostname.
@@ -305,8 +305,7 @@
* Load net library into runtime, and perform initializations.
*/
static {
- String str = java.security.AccessController.doPrivileged(
- new GetPropertyAction("java.net.preferIPv6Addresses"));
+ String str = GetPropertyAction.privilegedGetProperty("java.net.preferIPv6Addresses");
if (str == null) {
preferIPv6Address = PREFER_IPV4_VALUE;
} else if (str.equalsIgnoreCase("true")) {
--- a/src/java.base/share/classes/java/net/NetworkInterface.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/java/net/NetworkInterface.java Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -321,17 +321,16 @@
if (addr == null) {
throw new NullPointerException();
}
- if (addr instanceof Inet4Address) {
- Inet4Address inet4Address = (Inet4Address) addr;
- if (inet4Address.holder.family != InetAddress.IPv4) {
+
+ if (addr.holder.family == InetAddress.IPv4) {
+ if (!(addr instanceof Inet4Address)) {
throw new IllegalArgumentException("invalid family type: "
- + inet4Address.holder.family);
+ + addr.holder.family);
}
- } else if (addr instanceof Inet6Address) {
- Inet6Address inet6Address = (Inet6Address) addr;
- if (inet6Address.holder.family != InetAddress.IPv6) {
+ } else if (addr.holder.family == InetAddress.IPv6) {
+ if (!(addr instanceof Inet6Address)) {
throw new IllegalArgumentException("invalid family type: "
- + inet6Address.holder.family);
+ + addr.holder.family);
}
} else {
throw new IllegalArgumentException("invalid address type: " + addr);
@@ -394,6 +393,23 @@
}
}
+ /**
+ * Checks if the given address is bound to any of the interfaces on this
+ * machine.
+ *
+ * @param addr
+ * The {@code InetAddress} to search with.
+ * @return true iff the addr parameter is currently bound to one of
+ * the interfaces on this machine.
+ *
+ * @throws SocketException
+ * If an I/O error occurs.
+ */
+ /* package-private */ static boolean isBoundInetAddress(InetAddress addr)
+ throws SocketException {
+ return boundInetAddress0(addr);
+ }
+
private static <T> Enumeration<T> enumerationFromArray(T[] a) {
return new Enumeration<>() {
int i = 0;
@@ -431,6 +447,9 @@
private static native NetworkInterface getByIndex0(int index)
throws SocketException;
+ private static native boolean boundInetAddress0(InetAddress addr)
+ throws SocketException;
+
private static native NetworkInterface getByInetAddress0(InetAddress addr)
throws SocketException;
--- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties Sun Jul 07 20:28:41 2019 -0400
@@ -75,7 +75,7 @@
\ -D<name>=<value>\n\
\ set a system property\n\
\ -verbose:[class|module|gc|jni]\n\
-\ enable verbose output\n\
+\ enable verbose output for the given subsystem\n\
\ -version print product version to the error stream and exit\n\
\ --version print product version to the output stream and exit\n\
\ -showversion print product version to the error stream and continue\n\
@@ -129,9 +129,9 @@
\ append to end of bootstrap class path\n\
\ -Xcheck:jni perform additional checks for JNI functions\n\
\ -Xcomp forces compilation of methods on first invocation\n\
-\ -Xdebug provided for backward compatibility\n\
+\ -Xdebug does nothing. Provided for backward compatibility.\n\
\ -Xdiag show additional diagnostic messages\n\
-\ -Xfuture enable strictest checks, anticipating future default\n\
+\ -Xfuture enable strictest checks, anticipating future default.\n\
\ This option is deprecated and may be removed in a\n\
\ future release.\n\
\ -Xint interpreted mode execution only\n\
@@ -141,7 +141,9 @@
\ -Xlog:<opts> Configure or enable logging with the Java Virtual\n\
\ Machine (JVM) unified logging framework. Use -Xlog:help\n\
\ for details.\n\
-\ -Xloggc:<file> log GC status to a file with time stamps\n\
+\ -Xloggc:<file> log GC status to a file with time stamps.\n\
+\ This option is deprecated and may be removed in a\n\
+\ future release. It is replaced by -Xlog:gc:<file>.\n\
\ -Xmixed mixed mode execution (default)\n\
\ -Xmn<size> sets the initial and maximum size (in bytes) of the heap\n\
\ for the young generation (nursery)\n\
@@ -152,6 +154,8 @@
\ -Xshare:auto use shared class data if possible (default)\n\
\ -Xshare:off do not attempt to use shared class data\n\
\ -Xshare:on require using shared class data, otherwise fail.\n\
+\ This is a testing option and may lead to intermittent\n\
+\ failures. It should not be used in production environments.\n\
\ -XshowSettings show all settings and continue\n\
\ -XshowSettings:all\n\
\ show all settings and continue\n\
@@ -191,7 +195,6 @@
\ --patch-module <module>=<file>({0}<file>)*\n\
\ override or augment a module with classes and resources\n\
\ in JAR files or directories.\n\
-\ --disable-@files disable further argument file expansion\n\
\ --source <version>\n\
\ set the version of the source in source-file mode.\n\n\
These extra options are subject to change without notice.\n
@@ -199,7 +202,7 @@
# Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\
\n\
-The following options are Mac OS X specific:\n\
+The following options are macOS specific:\n\
\ -XstartOnFirstThread\n\
\ run the main() method on the first (AppKit) thread\n\
\ -Xdock:name=<application name>\n\
--- a/src/java.base/share/classes/sun/nio/ch/ChannelInputStream.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/share/classes/sun/nio/ch/ChannelInputStream.java Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -29,7 +29,7 @@
import java.nio.*;
import java.nio.channels.*;
import java.nio.channels.spi.*;
-
+import java.util.Objects;
/**
* This class is defined here rather than in java.nio.channels.Channels
@@ -87,10 +87,8 @@
public synchronized int read(byte[] bs, int off, int len)
throws IOException
{
- if ((off < 0) || (off > bs.length) || (len < 0) ||
- ((off + len) > bs.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- } else if (len == 0)
+ Objects.checkFromIndexSize(off, len, bs.length);
+ if (len == 0)
return 0;
ByteBuffer bb = ((this.bs == bs)
@@ -119,6 +117,26 @@
return 0;
}
+ public synchronized long skip(long n) throws IOException {
+ // special case where the channel is to a file
+ if (ch instanceof SeekableByteChannel && n > 0) {
+ SeekableByteChannel sbc = (SeekableByteChannel)ch;
+ try {
+ long pos = sbc.position();
+ long size = sbc.size();
+ if (pos >= size) {
+ return 0L;
+ }
+ n = Math.min(n, size - pos);
+ sbc.position(pos + n);
+ return sbc.position() - pos;
+ } catch (ClosedChannelException cce) {
+ throw new IOException(cce);
+ }
+ }
+ return super.skip(n);
+ }
+
public void close() throws IOException {
ch.close();
}
--- a/src/java.base/unix/native/libnet/NetworkInterface.c Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/unix/native/libnet/NetworkInterface.c Sun Jul 07 20:28:41 2019 -0400
@@ -320,33 +320,9 @@
return obj;
}
-/*
- * Class: java_net_NetworkInterface
- * Method: getByInetAddress0
- * Signature: (Ljava/net/InetAddress;)Ljava/net/NetworkInterface;
- */
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
- (JNIEnv *env, jclass cls, jobject iaObj)
-{
- netif *ifs, *curr;
- jobject obj = NULL;
- jboolean match = JNI_FALSE;
- int family = getInetAddress_family(env, iaObj);
- JNU_CHECK_EXCEPTION_RETURN(env, NULL);
-
- if (family == java_net_InetAddress_IPv4) {
- family = AF_INET;
- } else if (family == java_net_InetAddress_IPv6) {
- family = AF_INET6;
- } else {
- return NULL; // Invalid family
- }
- ifs = enumInterfaces(env);
- if (ifs == NULL) {
- return NULL;
- }
-
- curr = ifs;
+// Return the interface in ifs that iaObj is bound to, if any - otherwise NULL
+static netif* find_bound_interface(JNIEnv *env, netif* ifs, jobject iaObj, int family) {
+ netif* curr = ifs;
while (curr != NULL) {
netaddr *addrP = curr->addr;
@@ -359,11 +335,10 @@
((struct sockaddr_in *)addrP->addr)->sin_addr.s_addr);
int address2 = getInetAddress_addr(env, iaObj);
if ((*env)->ExceptionCheck(env)) {
- goto cleanup;
+ return NULL;
}
if (address1 == address2) {
- match = JNI_TRUE;
- break;
+ return curr;
}
} else if (family == AF_INET6) {
jbyte *bytes = (jbyte *)&(
@@ -383,30 +358,117 @@
i++;
}
if (i >= 16) {
- match = JNI_TRUE;
- break;
+ return curr;
}
}
}
- if (match) {
- break;
- }
addrP = addrP->next;
}
-
- if (match) {
- break;
- }
curr = curr->next;
}
+ return NULL;
+}
+
+/*
+ * Class: java_net_NetworkInterface
+ * Method: boundInetAddress0
+ * Signature: (Ljava/net/InetAddress;)boundInetAddress;
+ */
+JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_boundInetAddress0
+ (JNIEnv *env, jclass cls, jobject iaObj)
+{
+ netif *ifs = NULL;
+ jboolean bound = JNI_FALSE;
+ int sock;
+
+ int family = getInetAddress_family(env, iaObj);
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
+
+ if (family == java_net_InetAddress_IPv4) {
+ family = AF_INET;
+ } else if (family == java_net_InetAddress_IPv6) {
+ family = AF_INET6;
+ } else {
+ return JNI_FALSE; // Invalid family
+ }
+
+ if (family == AF_INET) {
+ sock = openSocket(env, AF_INET);
+ if (sock < 0 && (*env)->ExceptionOccurred(env)) {
+ return JNI_FALSE;
+ }
+
+ // enumerate IPv4 addresses
+ if (sock >= 0) {
+ ifs = enumIPv4Interfaces(env, sock, ifs);
+ close(sock);
+
+ if ((*env)->ExceptionOccurred(env)) {
+ goto cleanup;
+ }
+ }
+ if (find_bound_interface(env, ifs, iaObj, family) != NULL)
+ bound = JNI_TRUE;
+ } else if (ipv6_available()) {
+ // If IPv6 is available then enumerate IPv6 addresses.
+ // User can disable ipv6 explicitly by -Djava.net.preferIPv4Stack=true,
+ // so we have to call ipv6_available()
+ sock = openSocket(env, AF_INET6);
+ if (sock < 0) {
+ return JNI_FALSE;
+ }
+
+ ifs = enumIPv6Interfaces(env, sock, ifs);
+ close(sock);
+
+ if ((*env)->ExceptionOccurred(env)) {
+ goto cleanup;
+ }
+
+ if (find_bound_interface(env, ifs, iaObj, family) != NULL)
+ bound = JNI_TRUE;
+ }
+
+cleanup:
+ freeif(ifs);
+
+ return bound;
+}
+
+/*
+ * Class: java_net_NetworkInterface
+ * Method: getByInetAddress0
+ * Signature: (Ljava/net/InetAddress;)Ljava/net/NetworkInterface;
+ */
+JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
+ (JNIEnv *env, jclass cls, jobject iaObj)
+{
+ netif *ifs, *curr;
+ jobject obj = NULL;
+ int family = getInetAddress_family(env, iaObj);
+ JNU_CHECK_EXCEPTION_RETURN(env, NULL);
+
+ if (family == java_net_InetAddress_IPv4) {
+ family = AF_INET;
+ } else if (family == java_net_InetAddress_IPv6) {
+ family = AF_INET6;
+ } else {
+ return NULL; // Invalid family
+ }
+ ifs = enumInterfaces(env);
+ if (ifs == NULL) {
+ return NULL;
+ }
+
+ curr = find_bound_interface(env, ifs, iaObj, family);
+
// if found create a NetworkInterface
- if (match) {
+ if (curr != NULL) {
obj = createNetworkInterface(env, curr);
}
-cleanup:
// release the interface list
freeif(ifs);
--- a/src/java.base/windows/native/libnet/NetworkInterface.c Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/windows/native/libnet/NetworkInterface.c Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, 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
@@ -25,6 +25,7 @@
#include "net_util.h"
#include "NetworkInterface.h"
+#include "java_net_InetAddress.h"
#include "java_net_NetworkInterface.h"
/*
@@ -347,7 +348,7 @@
/*
* Free the interface table and return the interface list
*/
- if (tableP) {
+ if (tableP != NULL) {
free(tableP);
}
*netifPP = netifP;
@@ -355,24 +356,13 @@
}
/*
- * Enumerate the IP addresses on an interface using the IP helper library
- * routine GetIfAddrTable and matching based on the index name. There are
- * more efficient routines but we use GetIfAddrTable because it's avaliable
- * on 98 and NT.
- *
- * Returns the count of addresses, or -1 if error. If no error occurs then
- * netaddrPP will return a list of netaddr structures with the IP addresses.
+ * Enumerate all addresses using the IP helper library
*/
-int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
+int lookupIPAddrTable(JNIEnv *env, MIB_IPADDRTABLE **tablePP)
{
MIB_IPADDRTABLE *tableP;
ULONG size;
DWORD ret;
- DWORD i;
- netaddr *netaddrP;
- int count = 0;
- unsigned long mask;
-
/*
* Use GetIpAddrTable to enumerate the IP Addresses
*/
@@ -396,7 +386,7 @@
ret = GetIpAddrTable(tableP, &size, FALSE);
}
if (ret != NO_ERROR) {
- if (tableP) {
+ if (tableP != NULL) {
free(tableP);
}
JNU_ThrowByName(env, "java/lang/Error",
@@ -405,16 +395,35 @@
// GetIpAddrTable in pure IPv6 environment
return -2;
}
+ *tablePP = tableP;
+ return 0;
+}
+
+/*
+ * Enumerate the IP addresses on an interface, given an IP address table
+ * and matching based on index.
+ *
+ * Returns the count of addresses, or -1 if error. If no error occurs then
+ * netaddrPP will return a list of netaddr structures with the IP addresses.
+ */
+int enumAddresses_win_ipaddrtable(JNIEnv *env, netif *netifP, netaddr **netaddrPP, MIB_IPADDRTABLE *tableP)
+{
+ DWORD i;
+ netaddr *netaddrP;
+ int count = 0;
+ unsigned long mask;
/*
* Iterate through the table to find the addresses with the
* matching dwIndex. Ignore 0.0.0.0 addresses.
*/
+ if (tableP == NULL)
+ return 0;
count = 0;
netaddrP = NULL;
i = 0;
- while (i<tableP->dwNumEntries) {
+ while (i < tableP->dwNumEntries) {
if (tableP->table[i].dwIndex == netifP->dwIndex &&
tableP->table[i].dwAddr != 0) {
@@ -437,33 +446,33 @@
case MIB_IF_TYPE_FDDI:
case MIB_IF_TYPE_LOOPBACK:
case IF_TYPE_IEEE80211:
- /**
- * Contrary to what it seems to indicate, dwBCastAddr doesn't
- * contain the broadcast address but 0 or 1 depending on whether
- * the broadcast address should set the bits of the host part
- * to 0 or 1.
- * Yes, I know it's stupid, but what can I say, it's MSFTs API.
- */
- curr->brdcast.sa4.sin_family = AF_INET;
- if (tableP->table[i].dwBCastAddr == 1)
- curr->brdcast.sa4.sin_addr.s_addr = (tableP->table[i].dwAddr & tableP->table[i].dwMask) | (0xffffffff ^ tableP->table[i].dwMask);
- else
- curr->brdcast.sa4.sin_addr.s_addr = (tableP->table[i].dwAddr & tableP->table[i].dwMask);
- mask = ntohl(tableP->table[i].dwMask);
- curr->mask = 0;
- while (mask) {
- mask <<= 1;
- curr->mask++;
- }
- break;
+ /**
+ * Contrary to what it seems to indicate, dwBCastAddr doesn't
+ * contain the broadcast address but 0 or 1 depending on whether
+ * the broadcast address should set the bits of the host part
+ * to 0 or 1.
+ * Yes, I know it's stupid, but what can I say, it's MSFTs API.
+ */
+ curr->brdcast.sa4.sin_family = AF_INET;
+ if (tableP->table[i].dwBCastAddr == 1)
+ curr->brdcast.sa4.sin_addr.s_addr = (tableP->table[i].dwAddr & tableP->table[i].dwMask) | (0xffffffff ^ tableP->table[i].dwMask);
+ else
+ curr->brdcast.sa4.sin_addr.s_addr = (tableP->table[i].dwAddr & tableP->table[i].dwMask);
+ mask = ntohl(tableP->table[i].dwMask);
+ curr->mask = 0;
+ while (mask) {
+ mask <<= 1;
+ curr->mask++;
+ }
+ break;
case MIB_IF_TYPE_PPP:
case MIB_IF_TYPE_SLIP:
default:
- /**
- * these don't have broadcast/subnet
- */
- curr->mask = -1;
- break;
+ /**
+ * these don't have broadcast/subnet
+ */
+ curr->mask = -1;
+ break;
}
curr->next = netaddrP;
@@ -474,10 +483,30 @@
}
*netaddrPP = netaddrP;
+ return count;
+}
+
+
+/*
+ * Enumerate the IP addresses on an interface, using an IP address table
+ * retrieved using GetIPAddrTable and matching based on index.
+ *
+ * Returns the count of addresses, or -1 if error. If no error occurs then
+ * netaddrPP will return a list of netaddr structures with the IP addresses.
+ */
+int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP) {
+ MIB_IPADDRTABLE *tableP;
+ int count;
+ int ret = lookupIPAddrTable(env, &tableP);
+ if (ret < 0) {
+ return NULL;
+ }
+ count = enumAddresses_win_ipaddrtable(env, netifP, netaddrPP, tableP);
free(tableP);
return count;
}
+
/*
* Class: java_net_NetworkInterface
* Method: init
@@ -758,6 +787,50 @@
return netifObj;
}
+
+/*
+ * Class: java_net_NetworkInterface
+ * Method: boundInetAddress0
+ * Signature: (Ljava/net/InetAddress;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_boundInetAddress0
+ (JNIEnv *env, jclass cls, jobject iaObj)
+{
+ jobject netifObj = NULL;
+ DWORD i;
+
+ int family = getInetAddress_family(env, iaObj);
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
+
+ if (family == java_net_InetAddress_IPv6) {
+ if (!ipv6_available())
+ return JNI_FALSE;
+ return Java_java_net_NetworkInterface_getByInetAddress0_XP(env, cls, iaObj) != NULL;
+ } else if (family == java_net_InetAddress_IPv4) {
+ jint addr = getInetAddress_addr(env, iaObj);
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
+
+ jboolean found = JNI_FALSE;
+ MIB_IPADDRTABLE *tableP;
+ if (lookupIPAddrTable(env, &tableP) >= 0 && tableP != NULL) {
+ for (i = 0; i < tableP->dwNumEntries; i++) {
+ if (tableP->table[i].dwAddr != 0 &&
+ (unsigned long)addr == ntohl(tableP->table[i].dwAddr)) {
+ found = JNI_TRUE;
+ break;
+ }
+ }
+ }
+ if (tableP != NULL) {
+ free(tableP);
+ }
+ return found;
+ } else {
+ // Unknown address family
+ return JNI_FALSE;
+ }
+}
+
/*
* Class: java_net_NetworkInterface
* Method: getByInetAddress0
@@ -767,11 +840,11 @@
(JNIEnv *env, jclass cls, jobject iaObj)
{
netif *ifList, *curr;
+ MIB_IPADDRTABLE *tableP;
jobject netifObj = NULL;
jint addr = getInetAddress_addr(env, iaObj);
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
- // Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if (ipv6_available()) {
return Java_java_net_NetworkInterface_getByInetAddress0_XP (env, cls, iaObj);
}
@@ -785,42 +858,50 @@
* Enumerate the addresses on each interface until we find a
* matching address.
*/
- curr = ifList;
- while (curr != NULL) {
- int count;
- netaddr *addrList;
- netaddr *addrP;
+ tableP = NULL;
+ if (lookupIPAddrTable(env, &tableP) >= 0) {
+ curr = ifList;
+ while (curr != NULL) {
+ int count;
+ netaddr *addrList;
+ netaddr *addrP;
+
+ /* enumerate the addresses on this interface */
+ count = enumAddresses_win_ipaddrtable(env, curr, &addrList, tableP);
+ if (count < 0) {
+ free_netif(ifList);
+ free(tableP);
+ return NULL;
+ }
- /* enumerate the addresses on this interface */
- count = enumAddresses_win(env, curr, &addrList);
- if (count < 0) {
- free_netif(ifList);
- return NULL;
- }
+ /* iterate through each address */
+ addrP = addrList;
- /* iterate through each address */
- addrP = addrList;
+ while (addrP != NULL) {
+ if ((unsigned long)addr == ntohl(addrP->addr.sa4.sin_addr.s_addr)) {
+ break;
+ }
+ addrP = addrP->next;
+ }
- while (addrP != NULL) {
- if ((unsigned long)addr == ntohl(addrP->addr.sa4.sin_addr.s_addr)) {
+ /*
+ * Address matched so create NetworkInterface for this interface
+ * and address list.
+ */
+ if (addrP != NULL) {
+ /* createNetworkInterface will free addrList */
+ netifObj = createNetworkInterface(env, curr, count, addrList);
break;
}
- addrP = addrP->next;
- }
- /*
- * Address matched so create NetworkInterface for this interface
- * and address list.
- */
- if (addrP != NULL) {
- /* createNetworkInterface will free addrList */
- netifObj = createNetworkInterface(env, curr, count, addrList);
- break;
+ /* on next interface */
+ curr = curr->next;
}
+ }
- /* on next interface */
- curr = curr->next;
- }
+ /* release the IP address table */
+ if (tableP != NULL)
+ free(tableP);
/* release the interface list */
free_netif(ifList);
--- a/src/java.base/windows/native/libnet/NetworkInterface_winXP.c Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.base/windows/native/libnet/NetworkInterface_winXP.c Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -33,7 +33,9 @@
* and getByAddress.
*/
+extern int enumAddresses_win_ipaddrtable(JNIEnv *env, netif *netifP, netaddr **netaddrPP, MIB_IPADDRTABLE *tableP);
extern int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP);
+extern int lookupIPAddrTable(JNIEnv *env, MIB_IPADDRTABLE **tablePP);
int getAddrsFromAdapter(IP_ADAPTER_ADDRESSES *ptr, netaddr **netaddrPP);
#ifdef DEBUG
@@ -239,6 +241,7 @@
int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
{
DWORD ret;
+ MIB_IPADDRTABLE *tableP;
IP_ADAPTER_ADDRESSES *ptr, *adapters=NULL;
ULONG len=ipinflen, count=0;
netif *nif=NULL, *dup_nif, *last=NULL, *loopif=NULL, *curr;
@@ -271,10 +274,15 @@
// Retrieve IPv4 addresses with the IP Helper API
curr = *netifPP;
+ ret = lookupIPAddrTable(env, &tableP);
+ if (ret < 0) {
+ return -1;
+ }
while (curr != NULL) {
netaddr *netaddrP;
- ret = enumAddresses_win(env, curr, &netaddrP);
+ ret = enumAddresses_win_ipaddrtable(env, curr, &netaddrP, tableP);
if (ret == -1) {
+ free(tableP);
return -1;
} else if (ret == -2) {
if ((*env)->ExceptionCheck(env)) {
@@ -287,7 +295,7 @@
curr = curr->next;
}
}
-
+ free(tableP);
ret = getAdapters (env, &adapters);
if (ret != ERROR_SUCCESS) {
goto err;
--- a/src/java.security.jgss/share/classes/org/ietf/jgss/GSSContext.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/java.security.jgss/share/classes/org/ietf/jgss/GSSContext.java Sun Jul 07 20:28:41 2019 -0400
@@ -128,8 +128,8 @@
* <pre>
* // Create a context using default credentials
* // and the implementation specific default mechanism
- * GSSManager manager ...
- * GSSName targetName ...
+ * GSSManager manager = ...
+ * GSSName targetName = ...
* GSSContext context = manager.createContext(targetName, null, null,
* GSSContext.INDEFINITE_LIFETIME);
*
@@ -141,21 +141,23 @@
*
* // establish a context between peers
*
- * byte []inToken = new byte[0];
+ * byte[] inToken = new byte[0];
+ * byte[] outToken;
*
* // Loop while there still is a token to be processed
*
* while (!context.isEstablished()) {
*
- * byte[] outToken
- * = context.initSecContext(inToken, 0, inToken.length);
+ * outToken = context.initSecContext(inToken, 0, inToken.length);
*
* // send the output token if generated
- * if (outToken != null)
+ * if (outToken != null) {
* sendToken(outToken);
+ * }
*
* if (!context.isEstablished()) {
* inToken = readToken();
+ * }
* }
*
* // display context information
@@ -165,21 +167,40 @@
* System.out.println("Initiator = " + context.getSrcName());
* System.out.println("Acceptor = " + context.getTargName());
*
- * if (context.getConfState())
- * System.out.println("Confidentiality (i.e., privacy) is available");
+ * if (context.getConfState()) {
+ * System.out.println("Confidentiality (i.e., privacy) is available");
+ * }
*
- * if (context.getIntegState())
- * System.out.println("Integrity is available");
+ * if (context.getIntegState()) {
+ * System.out.println("Integrity is available");
+ * }
*
* // perform wrap on an application supplied message, appMsg,
* // using QOP = 0, and requesting privacy service
- * byte [] appMsg ...
+ * byte[] appMsg = ...
*
* MessageProp mProp = new MessageProp(0, true);
*
- * byte []tok = context.wrap(appMsg, 0, appMsg.length, mProp);
+ * outToken = context.wrap(appMsg, 0, appMsg.length, mProp);
+ *
+ * sendToken(outToken);
+ *
+ * // perform unwrap on an incoming application message, and check
+ * // its privacy state and supplementary information
+ * inToken = readToken();
+ *
+ * mProp = new MessageProp(0, true);
*
- * sendToken(tok);
+ * appMsg = context.unwrap(inToken, 0, inToken.length, mProp);
+ *
+ * System.out.println("Was it encrypted? " + mProp.getPrivacy());
+ * System.out.println("Duplicate Token? " + mProp.isDuplicateToken());
+ * System.out.println("Old Token? " + mProp.isOldToken());
+ * System.out.println("Unsequenced Token? " + mProp.isUnseqToken());
+ * System.out.println("Gap Token? " + mProp.isGapToken());
+ *
+ * // the application determines if the privacy state and supplementary
+ * // information are acceptable
*
* // release the local-end of the context
* context.dispose();
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Sun Jul 07 20:28:41 2019 -0400
@@ -299,6 +299,8 @@
if (chk.checkUnique(tree.pos(), v, enclScope)) {
chk.checkTransparentVar(tree.pos(), v, enclScope);
enclScope.enter(v);
+ } else if (v.owner.kind == MTH) {
+ enclScope.enter(v);
}
annotate.annotateLater(tree.mods.annotations, localEnv, v, tree.pos());
--- a/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Sun Jul 07 19:40:48 2019 -0400
+++ b/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Sun Jul 07 20:28:41 2019 -0400
@@ -837,10 +837,8 @@
// Primitive type resolution is context free.
return true;
}
- if (elementType.getName().startsWith("Ljava/")) {
- // Classes in a java.* package can only be defined by the
- // boot class loader. This is enforced by ClassLoader.preDefineClass()
- assert hasSameClassLoader(runtime().getJavaLangObject());
+ if (elementType.getName().startsWith("Ljava/") && hasSameClassLoader(runtime().getJavaLangObject())) {
+ // Classes in a java.* package defined by the boot class loader are always resolved.
return true;
}
HotSpotResolvedObjectTypeImpl otherMirror = ((HotSpotResolvedObjectTypeImpl) accessingClass);
--- a/test/hotspot/jtreg/compiler/c2/aarch64/TestVolatiles.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/compiler/c2/aarch64/TestVolatiles.java Sun Jul 07 20:28:41 2019 -0400
@@ -113,7 +113,7 @@
procArgs = new String[argcount];
procArgs[argcount - 4] = "-XX:+UnlockExperimentalVMOptions";
procArgs[argcount - 3] = "-XX:+UseShenandoahGC";
- procArgs[argcount - 2] = "-XX:ShenandoahGCHeuristics=traversal";
+ procArgs[argcount - 2] = "-XX:ShenandoahGCMode=traversal";
break;
default:
throw new RuntimeException("unexpected test type " + testType);
--- a/test/hotspot/jtreg/gc/CriticalNativeArgs.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/CriticalNativeArgs.java Sun Jul 07 20:28:41 2019 -0400
@@ -40,13 +40,14 @@
* @library /
* @requires (os.arch =="x86_64" | os.arch == "amd64") & vm.gc.Shenandoah & !vm.graal.enabled
* @summary test argument unpacking nmethod wrapper of critical native method
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*
* @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*
* @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xcomp -Xmx256M -XX:+CriticalJNINatives gc.CriticalNativeArgs
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCHeuristics=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.CriticalNativeArgs
*/
public class CriticalNativeArgs {
public static void main(String[] args) {
--- a/test/hotspot/jtreg/gc/shenandoah/TestAllocHumongousFragment.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestAllocHumongousFragment.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,22 +27,105 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestAllocHumongousFragment
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestAllocHumongousFragment
+ */
+
+/*
+ * @test TestAllocHumongousFragment
+ * @summary Make sure Shenandoah can recover from humongous allocation fragmentation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocHumongousFragment
*
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestAllocHumongousFragment
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xmx1g -Xms1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestAllocHumongousFragment
+ */
+
+/*
+ * @test TestAllocHumongousFragment
+ * @summary Make sure Shenandoah can recover from humongous allocation fragmentation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestAllocHumongousFragment
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
*
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=adaptive TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=static TestAllocHumongousFragment
- * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048 -XX:ShenandoahGCHeuristics=traversal TestAllocHumongousFragment
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestAllocHumongousFragment
+ *
+ * @run main/othervm -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g -XX:ShenandoahTargetNumRegions=2048
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestAllocHumongousFragment
*/
import java.util.*;
--- a/test/hotspot/jtreg/gc/shenandoah/TestAllocIntArrays.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestAllocIntArrays.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,26 +27,118 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestAllocIntArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestAllocIntArrays
+ */
+
+/*
+ * @test TestAllocIntArrays
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestAllocIntArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestAllocIntArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ */
+
+/*
+ * @test TestAllocIntArrays
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestAllocIntArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocIntArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static TestAllocIntArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact TestAllocIntArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocIntArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:-UseTLAB -XX:+ShenandoahVerify TestAllocIntArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestAllocIntArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestAllocIntArrays
*/
import java.util.Random;
--- a/test/hotspot/jtreg/gc/shenandoah/TestAllocObjectArrays.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestAllocObjectArrays.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,26 +27,117 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestAllocObjectArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestAllocObjectArrays
+
+/*
+ * @test TestAllocObjectArrays
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestAllocObjectArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ */
+
+/*
+ * @test TestAllocObjectArrays
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestAllocObjectArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocObjectArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact TestAllocObjectArrays
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestAllocObjectArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocObjectArrays
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:-UseTLAB -XX:+ShenandoahVerify TestAllocObjectArrays
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestAllocObjectArrays
+ *
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestAllocObjectArrays
*/
import java.util.Random;
--- a/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,30 +27,138 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestAllocObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestAllocObjects
+ */
+
+/*
+ * @test TestAllocObjects
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestAllocObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahSuspendibleWorkers
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestAllocObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestAllocObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahSuspendibleWorkers
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * -XX:+ShenandoahSuspendibleWorkers
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -XX:+ShenandoahSuspendibleWorkers
+ * TestAllocObjects
+ */
+
+/*
+ * @test TestAllocObjects
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestAllocObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestAllocObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahSuspendibleWorkers TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static -XX:+ShenandoahSuspendibleWorkers TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact -XX:+ShenandoahSuspendibleWorkers TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahSuspendibleWorkers TestAllocObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahSuspendibleWorkers TestAllocObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestAllocObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahSuspendibleWorkers
+ * TestAllocObjects
*/
import java.util.Random;
--- a/test/hotspot/jtreg/gc/shenandoah/TestGCThreadGroups.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestGCThreadGroups.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,21 +27,121 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:-UseDynamicNumberOfGCThreads -Xmx16m -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UnlockDiagnosticVMOptions -XX:+ForceDynamicNumberOfGCThreads -Xmx16m -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=passive -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=adaptive -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=static -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=compact -Dtarget=100 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=aggressive -Dtarget=100 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 -Xmx16m -XX:ShenandoahGCHeuristics=traversal -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=passive -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=adaptive -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=static -Dtarget=1000 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=compact -Dtarget=100 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=aggressive -Dtarget=100 TestGCThreadGroups
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2 -Xmx16m -XX:ShenandoahGCHeuristics=traversal -Dtarget=1000 TestGCThreadGroups
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ */
+
+/**
+ * @test TestGCThreadGroups
+ * @summary Test Shenandoah GC uses concurrent/parallel threads correctly
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:-UseDynamicNumberOfGCThreads
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:+ForceDynamicNumberOfGCThreads
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=100
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=100
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=100
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=100
+ * TestGCThreadGroups
+ */
+
+/**
+ * @test TestGCThreadGroups
+ * @summary Test Shenandoah GC uses concurrent/parallel threads correctly
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=1000
+ * TestGCThreadGroups
+ *
+ * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ConcGCThreads=4 -XX:ParallelGCThreads=2
+ * -Dtarget=1000
+ * TestGCThreadGroups
*/
public class TestGCThreadGroups {
--- a/test/hotspot/jtreg/gc/shenandoah/TestHeapUncommit.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestHeapUncommit.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,34 +27,98 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestHeapUncommit
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestHeapUncommit
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=static -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestHeapUncommit
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestHeapUncommit
+ */
+
+/*
+ * @test TestHeapUncommit
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestHeapUncommit
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:-UseTLAB -XX:+ShenandoahVerify TestHeapUncommit
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestHeapUncommit
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 TestHeapUncommit
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ */
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=adaptive TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=static TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=compact TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=aggressive TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:ShenandoahGCHeuristics=traversal TestHeapUncommit
+/*
+ * @test TestHeapUncommit
+ * @summary Acceptance tests: collector can withstand allocation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestHeapUncommit
*/
/*
* @test TestHeapUncommit
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled & (vm.bits == "64")
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+UseLargePages -XX:+ShenandoahVerify TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+UseLargePages TestHeapUncommit
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:-UseTLAB -XX:+UseLargePages -XX:+ShenandoahVerify TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+UseLargePages
+ * -XX:+UseShenandoahGC
+ * -XX:+ShenandoahVerify
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+UseLargePages
+ * -XX:+UseShenandoahGC
+ * TestHeapUncommit
+ *
+ * @run main/othervm -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahUncommit -XX:ShenandoahUncommitDelay=0 -XX:+UseLargePages
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestHeapUncommit
*/
import java.util.Random;
--- a/test/hotspot/jtreg/gc/shenandoah/TestLotsOfCycles.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestLotsOfCycles.java Sun Jul 07 20:28:41 2019 -0400
@@ -26,18 +26,83 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=passive -Dtarget=10000 -XX:+ShenandoahDegeneratedGC TestLotsOfCycles
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=passive -Dtarget=10000 -XX:-ShenandoahDegeneratedGC TestLotsOfCycles
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * -Dtarget=10000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * -Dtarget=10000
+ * TestLotsOfCycles
+ */
+
+/*
+ * @test TestLotsOfCycles
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * -Dtarget=1000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * -Dtarget=1000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -Dtarget=1000
+ * TestLotsOfCycles
*
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=aggressive -Dtarget=1000 -XX:+ShenandoahOOMDuringEvacALot TestLotsOfCycles
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=aggressive -Dtarget=1000 -XX:+ShenandoahAllocFailureALot TestLotsOfCycles
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=aggressive -Dtarget=1000 TestLotsOfCycles
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -Dtarget=10000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * -Dtarget=10000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -Dtarget=1000
+ * TestLotsOfCycles
+ */
+
+/*
+ * @test TestLotsOfCycles
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=adaptive -Dtarget=10000 TestLotsOfCycles
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=traversal -Dtarget=10000 TestLotsOfCycles
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * -Dtarget=1000
+ * TestLotsOfCycles
*
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=static -Dtarget=10000 TestLotsOfCycles
- * @run main/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx16m -XX:ShenandoahGCHeuristics=compact -Dtarget=1000 TestLotsOfCycles
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * -Dtarget=1000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -Dtarget=1000
+ * TestLotsOfCycles
+ *
+ * @run main/othervm/timeout=480 -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -Dtarget=10000
+ * TestLotsOfCycles
*/
public class TestLotsOfCycles {
--- a/test/hotspot/jtreg/gc/shenandoah/TestObjItrWithHeapDump.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestObjItrWithHeapDump.java Sun Jul 07 20:28:41 2019 -0400
@@ -55,25 +55,27 @@
System.exit(0);
}
- String[] heuristics = new String[] {
- "adaptive",
- "compact",
- "static",
- "aggressive",
- "passive",
- "traversal",
+ String[][][] modeHeuristics = new String[][][] {
+ {{"normal"}, {"adaptive", "compact", "static", "aggressive"}},
+ {{"traversal"}, {"adaptive", "aggressive"}},
+ {{"passive"}, {"passive"}}
};
- for (String h : heuristics) {
- testWith("-XX:+UnlockDiagnosticVMOptions",
- "-XX:+UnlockExperimentalVMOptions",
- "-XX:+UseShenandoahGC",
- "-XX:-ShenandoahDegeneratedGC",
- "-XX:ShenandoahGCHeuristics=" + h,
- "-Xlog:gc+classhisto=trace",
- "-XX:-ExplicitGCInvokesConcurrent",
- "-Xmx512M"
- );
+ for (String[][] mh : modeHeuristics) {
+ String mode = mh[0][0];
+ String[] heuristics = mh[1];
+ for (String h : heuristics) {
+ testWith("-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:-ShenandoahDegeneratedGC",
+ "-XX:ShenandoahGCMode=" + mode,
+ "-XX:ShenandoahGCHeuristics=" + h,
+ "-Xlog:gc+classhisto=trace",
+ "-XX:-ExplicitGCInvokesConcurrent",
+ "-Xmx512M"
+ );
+ }
}
}
}
--- a/test/hotspot/jtreg/gc/shenandoah/TestPeriodicGC.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestPeriodicGC.java Sun Jul 07 20:28:41 2019 -0400
@@ -64,12 +64,6 @@
"adaptive",
"compact",
"static",
- "traversal",
- };
-
- String[] disabled = new String[] {
- "aggressive",
- "passive",
};
for (String h : enabled) {
@@ -94,17 +88,44 @@
);
}
- for (String h : disabled) {
- testWith("Short period with " + h,
- false,
- "-Xlog:gc",
- "-XX:+UnlockDiagnosticVMOptions",
- "-XX:+UnlockExperimentalVMOptions",
- "-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
- "-XX:ShenandoahGuaranteedGCInterval=1000"
- );
- }
+ testWith("Short period with traversal mode",
+ true,
+ "-Xlog:gc",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:ShenandoahGCMode=traversal",
+ "-XX:ShenandoahGuaranteedGCInterval=1000"
+ );
+
+ testWith("Long period with traversal mode",
+ false,
+ "-Xlog:gc",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:ShenandoahGCMode=traversal",
+ "-XX:ShenandoahGuaranteedGCInterval=100000" // deliberately too long
+ );
+
+ testWith("Short period with aggressive",
+ false,
+ "-Xlog:gc",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:ShenandoahGCHeuristics=aggressive",
+ "-XX:ShenandoahGuaranteedGCInterval=1000"
+ );
+ testWith("Short period with passive",
+ false,
+ "-Xlog:gc",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:ShenandoahGCMode=passive",
+ "-XX:ShenandoahGuaranteedGCInterval=1000"
+ );
}
}
--- a/test/hotspot/jtreg/gc/shenandoah/TestRefprocSanity.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestRefprocSanity.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,11 +27,38 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g TestRefprocSanity
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:+ShenandoahVerify TestRefprocSanity
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestRefprocSanity
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:+ShenandoahVerify -XX:ShenandoahGCHeuristics=traversal TestRefprocSanity
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestRefprocSanity
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:+ShenandoahVerify
+ * TestRefprocSanity
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * TestRefprocSanity
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestRefprocSanity
+ */
+
+/*
+ * @test TestRefprocSanity
+ * @summary Test that null references/referents work fine
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestRefprocSanity
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestRefprocSanity
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestRefprocSanity
*/
import java.lang.ref.*;
--- a/test/hotspot/jtreg/gc/shenandoah/TestRegionSampling.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestRegionSampling.java Sun Jul 07 20:28:41 2019 -0400
@@ -25,16 +25,50 @@
* @test TestRegionSampling
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahRegionSampling TestRegionSampling
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestRegionSampling
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestRegionSampling
+ */
+
+/*
+ * @test TestRegionSampling
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestRegionSampling
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahRegionSampling TestRegionSampling
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahRegionSampling TestRegionSampling
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestRegionSampling
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestRegionSampling
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestRegionSampling
+ */
+
+/*
+ * @test TestRegionSampling
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestRegionSampling
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ShenandoahRegionSampling
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestRegionSampling
+ *
*/
public class TestRegionSampling {
--- a/test/hotspot/jtreg/gc/shenandoah/TestRetainObjects.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestRetainObjects.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,24 +27,98 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestRetainObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestRetainObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestRetainObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestRetainObjects
+ */
+
+/*
+ * @test TestRetainObjects
+ * @summary Acceptance tests: collector can deal with retained objects
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestRetainObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestRetainObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestRetainObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact TestRetainObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestRetainObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestRetainObjects
+ */
+
+/*
+ * @test TestRetainObjects
+ * @summary Acceptance tests: collector can deal with retained objects
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestRetainObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:-UseTLAB -XX:+ShenandoahVerify TestRetainObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestRetainObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestRetainObjects
*/
public class TestRetainObjects {
--- a/test/hotspot/jtreg/gc/shenandoah/TestSieveObjects.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestSieveObjects.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,24 +27,98 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestSieveObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestSieveObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=aggressive TestSieveObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestSieveObjects
+ */
+
+/*
+ * @test TestSieveObjects
+ * @summary Acceptance tests: collector can deal with retained objects
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestSieveObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestSieveObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestSieveObjects
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=adaptive TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=static TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=compact TestSieveObjects
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:ShenandoahGCHeuristics=traversal TestSieveObjects
+ * @run main/othervm/timeout=240 -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:-UseTLAB -XX:+ShenandoahVerify
+ * TestSieveObjects
+ */
+
+/*
+ * @test TestSieveObjects
+ * @summary Acceptance tests: collector can deal with retained objects
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * TestSieveObjects
*
- * @run main/othervm/timeout=240 -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g -Xms1g -XX:-UseTLAB -XX:+ShenandoahVerify TestSieveObjects
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestSieveObjects
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestSieveObjects
*/
import java.util.concurrent.ThreadLocalRandom;
--- a/test/hotspot/jtreg/gc/shenandoah/TestStringDedup.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestStringDedup.java Sun Jul 07 20:28:41 2019 -0400
@@ -21,7 +21,28 @@
*
*/
- /*
+/*
+ * @test TestStringDedup
+ * @summary Test Shenandoah string deduplication implementation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
+ * java.management
+ *
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestStringDedup
+ *
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestStringDedup
+ */
+
+/*
* @test TestStringDedup
* @summary Test Shenandoah string deduplication implementation
* @key gc
@@ -30,15 +51,37 @@
* @modules java.base/jdk.internal.misc:open
* @modules java.base/java.lang:open
* java.management
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestStringDedup
+ *
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC
+ * TestStringDedup
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestStringDedup
+ */
+
+/*
+ * @test TestStringDedup
+ * @summary Test Shenandoah string deduplication implementation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
+ * java.management
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact -XX:+UseStringDeduplication -Xmx256M -Xlog:gc+stats TestStringDedup
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestStringDedup
+ *
+ * @run main/othervm -Xmx256m -Xlog:gc+stats -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestStringDedup
*/
import java.lang.reflect.*;
--- a/test/hotspot/jtreg/gc/shenandoah/TestStringDedupStress.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestStringDedupStress.java Sun Jul 07 20:28:41 2019 -0400
@@ -21,6 +21,82 @@
*
*/
+/*
+ * @test TestStringDedupStress
+ * @summary Test Shenandoah string deduplication implementation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
+ * java.management
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestStringDedupStress
+ */
+
+/*
+ * @test TestStringDedupStress
+ * @summary Test Shenandoah string deduplication implementation
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
+ * java.management
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC
+ * -DtargetStrings=3000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC
+ * -XX:ShenandoahUpdateRefsEarly=off
+ * -DtargetStrings=3000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -XX:ShenandoahUpdateRefsEarly=off
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ShenandoahUpdateRefsEarly=off
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
+ *
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:ShenandoahUpdateRefsEarly=off -XX:+ShenandoahOOMDuringEvacALot
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
+ */
+
/*
* @test TestStringDedupStress
* @summary Test Shenandoah string deduplication implementation
@@ -30,75 +106,27 @@
* @modules java.base/jdk.internal.misc:open
* @modules java.base/java.lang:open
* java.management
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -DtargetStrings=3000000
- * -Xlog:gc
- * TestStringDedupStress
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=aggressive -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestStringDedupStress
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=static -DtargetStrings=4000000
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=compact
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC
- * -Xlog:gc
- * TestStringDedupStress
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=traversal
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahUpdateRefsEarly=off -DtargetStrings=3000000
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=compact -XX:ShenandoahUpdateRefsEarly=off -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=aggressive -XX:ShenandoahUpdateRefsEarly=off -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=static -XX:ShenandoahUpdateRefsEarly=off
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=aggressive -XX:ShenandoahUpdateRefsEarly=off -XX:+ShenandoahOOMDuringEvacALot -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
- *
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -Xmx1g -Xlog:gc+stats
- * -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahOOMDuringEvacALot -DtargetStrings=2000000
- * -Xlog:gc
- * TestStringDedupStress
+ * @run main/othervm -Xmx1g -Xlog:gc+stats -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * -DtargetStrings=2000000
+ * TestStringDedupStress
*/
import java.lang.management.*;
--- a/test/hotspot/jtreg/gc/shenandoah/TestStringInternCleanup.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestStringInternCleanup.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,22 +27,74 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestStringInternCleanup
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestStringInternCleanup
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=aggressive TestStringInternCleanup
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestStringInternCleanup
+ */
+
+/*
+ * @test TestStringInternCleanup
+ * @summary Check that Shenandoah cleans up interned strings
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestStringInternCleanup
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify TestStringInternCleanup
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestStringInternCleanup
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=adaptive TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=static TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=compact TestStringInternCleanup
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ClassUnloadingWithConcurrentMark -Xmx64m -XX:ShenandoahGCHeuristics=traversal TestStringInternCleanup
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:-ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC
+ * TestStringInternCleanup
+ */
+
+/*
+ * @test TestStringInternCleanup
+ * @summary Check that Shenandoah cleans up interned strings
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:-ClassUnloadingWithConcurrentMark -Xmx64m TestStringInternCleanup
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahVerify
+ * TestStringInternCleanup
+ *
+ * @run main/othervm -Xmx64m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+ClassUnloadingWithConcurrentMark
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestStringInternCleanup
*/
public class TestStringInternCleanup {
--- a/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java Sun Jul 07 20:28:41 2019 -0400
@@ -28,35 +28,49 @@
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @modules java.base/jdk.internal.misc
* java.management
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+UseShenandoahGC -Xmx1g -Xms1g
- * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals
- * -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC
- * TestVerifyJCStress
+ *
+ * @run main/othervm -Xmx1g -Xms1g -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify -XX:+VerifyObjectEquals
+ * TestVerifyJCStress
*
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+UseShenandoahGC -Xmx1g -Xms1g
- * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals
- * -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC
- * TestVerifyJCStress
+ * @run main/othervm -Xmx1g -Xms1g -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify -XX:+VerifyObjectEquals
+ * TestVerifyJCStress
+ */
+
+/*
+ * @test TestVerifyJCStress
+ * @summary Tests that we pass at least one jcstress-like test with all verification turned on
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @modules java.base/jdk.internal.misc
+ * java.management
*
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+UseShenandoahGC -Xmx1g -Xms1g
- * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
- * -XX:ShenandoahGCHeuristics=adaptive
- * TestVerifyJCStress
+ * @run main/othervm -Xmx1g -Xms1g -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
+ * TestVerifyJCStress
*
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+UseShenandoahGC -Xmx1g -Xms1g
- * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
- * -XX:ShenandoahGCHeuristics=static
- * TestVerifyJCStress
+ * @run main/othervm -Xmx1g -Xms1g -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
+ * TestVerifyJCStress
+ */
+
+/*
+ * @test TestVerifyJCStress
+ * @summary Tests that we pass at least one jcstress-like test with all verification turned on
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @modules java.base/jdk.internal.misc
+ * java.management
*
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
- * -XX:+UseShenandoahGC -Xmx1g -Xms1g
- * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
- * -XX:ShenandoahGCHeuristics=traversal
- * TestVerifyJCStress
+ * @run main/othervm -Xmx1g -Xms1g -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify -XX:+VerifyObjectEquals -XX:+ShenandoahVerifyOptoBarriers
+ * TestVerifyJCStress
*/
import java.util.*;
--- a/test/hotspot/jtreg/gc/shenandoah/TestWrongArrayMember.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/TestWrongArrayMember.java Sun Jul 07 20:28:41 2019 -0400
@@ -26,8 +26,8 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC TestWrongArrayMember
- * @run main/othervm -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal TestWrongArrayMember
+ * @run main/othervm -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC TestWrongArrayMember
+ * @run main/othervm -Xmx128m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal TestWrongArrayMember
*/
public class TestWrongArrayMember {
--- a/test/hotspot/jtreg/gc/shenandoah/jni/TestJNIGlobalRefs.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/jni/TestJNIGlobalRefs.java Sun Jul 07 20:28:41 2019 -0400
@@ -25,8 +25,21 @@
* @summary Test JNI Global Refs with Shenandoah
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xlog:gc -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahVerify TestJNIGlobalRefs
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xlog:gc -XX:ShenandoahGCHeuristics=aggressive TestJNIGlobalRefs
+ *
+ * @run main/othervm/native -Xmx1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahVerify
+ * TestJNIGlobalRefs
+ */
+
+/* @test TestJNIGlobalRefs
+ * @summary Test JNI Global Refs with Shenandoah
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm/native -Xmx1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestJNIGlobalRefs
*/
import java.util.Arrays;
--- a/test/hotspot/jtreg/gc/shenandoah/jni/TestPinnedGarbage.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/jni/TestPinnedGarbage.java Sun Jul 07 20:28:41 2019 -0400
@@ -26,12 +26,30 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx512m -XX:+ShenandoahVerify -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestPinnedGarbage
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx512m -XX:+ShenandoahVerify -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestPinnedGarbage
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx512m
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahVerify -XX:+ShenandoahDegeneratedGC
+ * TestPinnedGarbage
*
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx512m -XX:ShenandoahGCHeuristics=aggressive TestPinnedGarbage
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx512m
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahVerify -XX:-ShenandoahDegeneratedGC
+ * TestPinnedGarbage
+ */
+
+/* @test TestPinnedGarbage
+ * @summary Test that garbage in the pinned region does not crash VM
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx512m -XX:+ShenandoahVerify TestPinnedGarbage
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx512m
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestPinnedGarbage
+ *
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx512m
+ * -XX:+UseShenandoahGC
+ * -XX:+ShenandoahVerify
+ * TestPinnedGarbage
*/
import java.util.Arrays;
--- a/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestChurnNotifications.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestChurnNotifications.java Sun Jul 07 20:28:41 2019 -0400
@@ -26,15 +26,57 @@
* @summary Check that MX notifications are reported for all cycles
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -Dprecise=true TestChurnNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -Dprecise=true TestChurnNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -Dprecise=true
+ * TestChurnNotifications
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -Dprecise=false TestChurnNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -Dprecise=true
+ * TestChurnNotifications
+ */
+
+/*
+ * @test TestChurnNotifications
+ * @summary Check that MX notifications are reported for all cycles
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -Dprecise=false
+ * TestChurnNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -Dprecise=false
+ * TestChurnNotifications
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive -Dprecise=false TestChurnNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static -Dprecise=false TestChurnNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact -Dprecise=false TestChurnNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal -Dprecise=false TestChurnNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * -Dprecise=false
+ * TestChurnNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * -Dprecise=false
+ * TestChurnNotifications
+ */
+
+/*
+ * @test TestChurnNotifications
+ * @summary Check that MX notifications are reported for all cycles
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -Dprecise=false
+ * TestChurnNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -Dprecise=false
+ * TestChurnNotifications
*/
import java.util.*;
--- a/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestPauseNotifications.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/mxbeans/TestPauseNotifications.java Sun Jul 07 20:28:41 2019 -0400
@@ -27,15 +27,53 @@
* @key gc
* @requires vm.gc.Shenandoah & !vm.graal.enabled
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC TestPauseNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC TestPauseNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * TestPauseNotifications
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive TestPauseNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * TestPauseNotifications
+ */
+
+/*
+ * @test TestPauseNotifications
+ * @summary Check that MX notifications are reported for all cycles
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * TestPauseNotifications
*
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive TestPauseNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static TestPauseNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact TestPauseNotifications
- * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal TestPauseNotifications
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * TestPauseNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static
+ * TestPauseNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * TestPauseNotifications
+ */
+
+/*
+ * @test TestPauseNotifications
+ * @summary Check that MX notifications are reported for all cycles
+ * @key gc
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * TestPauseNotifications
+ *
+ * @run main/othervm -Xmx128m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * TestPauseNotifications
*/
import java.util.*;
--- a/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java Sun Jul 07 20:28:41 2019 -0400
@@ -124,30 +124,31 @@
return;
}
- String[] heuristics = new String[] {
- "adaptive",
- "compact",
- "static",
- "traversal",
- "aggressive",
- "passive",
+ String[][][] modeHeuristics = new String[][][] {
+ {{"normal"}, {"adaptive", "compact", "static", "aggressive"}},
+ {{"traversal"}, {"adaptive", "aggressive"}},
+ {{"passive"}, {"passive"}}
};
- for (String h : heuristics) {
- // Forceful enabling should work
- passWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading");
- passWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloadingWithConcurrentMark");
+ for (String[][] mh : modeHeuristics) {
+ String mode = mh[0][0];
+ String[] heuristics = mh[1];
+ for (String h : heuristics) {
+ // Forceful enabling should work
+ passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading");
+ passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloadingWithConcurrentMark");
- // Even when concurrent unloading is disabled, Full GC has to recover
- passWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark");
- passWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
- passWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
+ // Even when concurrent unloading is disabled, Full GC has to recover
+ passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark");
+ passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
+ passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
- // Should OOME when unloading forcefully disabled, even if local flags try to enable it back
- failWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading");
- failWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark");
- failWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
- failWith("-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
+ // Should OOME when unloading forcefully disabled, even if local flags try to enable it back
+ failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading");
+ failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark");
+ failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
+ failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
+ }
}
}
}
--- a/test/hotspot/jtreg/gc/shenandoah/options/TestExplicitGC.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/options/TestExplicitGC.java Sun Jul 07 20:28:41 2019 -0400
@@ -129,7 +129,7 @@
"-XX:+UseShenandoahGC",
"-Xlog:gc",
"-XX:+ExplicitGCInvokesConcurrent",
- "-XX:ShenandoahGCHeuristics=traversal",
+ "-XX:ShenandoahGCMode=traversal",
TestExplicitGC.class.getName(),
"test");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
--- a/test/hotspot/jtreg/gc/shenandoah/options/TestHeuristicsUnlock.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/options/TestHeuristicsUnlock.java Sun Jul 07 20:28:41 2019 -0400
@@ -44,14 +44,14 @@
}
public static void main(String[] args) throws Exception {
- testWith("adaptive", Mode.PRODUCT);
- testWith("static", Mode.PRODUCT);
- testWith("compact", Mode.PRODUCT);
+ testWith("-XX:ShenandoahGCHeuristics=adaptive", Mode.PRODUCT);
+ testWith("-XX:ShenandoahGCHeuristics=static", Mode.PRODUCT);
+ testWith("-XX:ShenandoahGCHeuristics=compact", Mode.PRODUCT);
- testWith("traversal", Mode.EXPERIMENTAL);
+ testWith("-XX:ShenandoahGCMode=traversal", Mode.EXPERIMENTAL);
- testWith("aggressive", Mode.DIAGNOSTIC);
- testWith("passive", Mode.DIAGNOSTIC);
+ testWith("-XX:ShenandoahGCHeuristics=aggressive", Mode.DIAGNOSTIC);
+ testWith("-XX:ShenandoahGCHeuristics=passive", Mode.DIAGNOSTIC);
}
private static void testWith(String h, Mode mode) throws Exception {
@@ -60,7 +60,7 @@
"-XX:-UnlockDiagnosticVMOptions",
"-XX:-UnlockExperimentalVMOptions",
"-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
+ h,
"-version"
);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
@@ -80,7 +80,7 @@
"-XX:+UnlockDiagnosticVMOptions",
"-XX:-UnlockExperimentalVMOptions",
"-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
+ h,
"-version"
);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
@@ -100,7 +100,7 @@
"-XX:-UnlockDiagnosticVMOptions",
"-XX:+UnlockExperimentalVMOptions",
"-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
+ h,
"-version"
);
OutputAnalyzer output = new OutputAnalyzer(pb.start());
--- a/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java Sun Jul 07 20:28:41 2019 -0400
@@ -65,7 +65,7 @@
conf.add("-XX:+UnlockDiagnosticVMOptions");
conf.add("-XX:+UnlockExperimentalVMOptions");
conf.add("-XX:+UseShenandoahGC");
- conf.add("-XX:ShenandoahGCHeuristics=passive");
+ conf.add("-XX:ShenandoahGCMode=passive");
StringBuilder sb = new StringBuilder();
for (String[] l : opts) {
--- a/test/hotspot/jtreg/gc/shenandoah/options/TestWrongBarrierDisable.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/shenandoah/options/TestWrongBarrierDisable.java Sun Jul 07 20:28:41 2019 -0400
@@ -51,13 +51,13 @@
"ShenandoahCloneBarrier",
};
- shouldFailAll("adaptive", concurrent);
- shouldFailAll("static", concurrent);
- shouldFailAll("compact", concurrent);
- shouldFailAll("aggressive", concurrent);
- shouldFailAll("traversal", traversal);
- shouldPassAll("passive", concurrent);
- shouldPassAll("passive", traversal);
+ shouldFailAll("-XX:ShenandoahGCHeuristics=adaptive", concurrent);
+ shouldFailAll("-XX:ShenandoahGCHeuristics=static", concurrent);
+ shouldFailAll("-XX:ShenandoahGCHeuristics=compact", concurrent);
+ shouldFailAll("-XX:ShenandoahGCHeuristics=aggressive", concurrent);
+ shouldFailAll("-XX:ShenandoahGCMode=traversal", traversal);
+ shouldPassAll("-XX:ShenandoahGCMode=passive", concurrent);
+ shouldPassAll("-XX:ShenandoahGCMode=passive", traversal);
}
private static void shouldFailAll(String h, String[] barriers) throws Exception {
@@ -66,7 +66,7 @@
"-XX:+UnlockDiagnosticVMOptions",
"-XX:+UnlockExperimentalVMOptions",
"-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
+ h,
"-XX:-" + b,
"-version"
);
@@ -83,7 +83,7 @@
"-XX:+UnlockDiagnosticVMOptions",
"-XX:+UnlockExperimentalVMOptions",
"-XX:+UseShenandoahGC",
- "-XX:ShenandoahGCHeuristics=" + h,
+ h,
"-XX:-" + b,
"-version"
);
--- a/test/hotspot/jtreg/gc/stress/CriticalNativeStress.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/stress/CriticalNativeStress.java Sun Jul 07 20:28:41 2019 -0400
@@ -43,12 +43,13 @@
* @library /
* @requires (os.arch =="x86_64" | os.arch == "amd64") & vm.gc.Shenandoah & !vm.graal.enabled
* @summary test argument pinning by nmethod wrapper of critical native method
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive -XX:-ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive -XX:+ShenandoahDegeneratedGC -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
*
* @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
* @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xcomp -Xmx256M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
- * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
+ * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive -Xcomp -Xmx512M -XX:+CriticalJNINatives gc.stress.CriticalNativeStress
*/
public class CriticalNativeStress {
private static Random rand = new Random();
--- a/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithShenandoah.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithShenandoah.java Sun Jul 07 20:28:41 2019 -0400
@@ -34,19 +34,105 @@
* @requires vm.flavor == "server" & !vm.emulatedClient & !vm.graal.enabled
* @summary Stress the Shenandoah GC by trying to make old objects more likely to be garbage than young objects.
*
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahVerify -XX:+ShenandoahDegeneratedGC gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahVerify -XX:-ShenandoahDegeneratedGC gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahVerify -XX:+ShenandoahDegeneratedGC
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahVerify -XX:-ShenandoahDegeneratedGC
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ */
+
+/*
+ * @test TestGCBasherWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @requires vm.flavor == "server" & !vm.emulatedClient & !vm.graal.enabled
+ * @summary Stress the Shenandoah GC by trying to make old objects more likely to be garbage than young objects.
*
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ */
+
+/*
+ * @test TestGCBasherWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @requires vm.flavor == "server" & !vm.emulatedClient & !vm.graal.enabled
+ * @summary Stress the Shenandoah GC by trying to make old objects more likely to be garbage than young objects.
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
*
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ */
+
+/*
+ * @test TestGCBasherWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @requires vm.flavor == "server" & !vm.emulatedClient & !vm.graal.enabled
+ * @summary Stress the Shenandoah GC by trying to make old objects more likely to be garbage than young objects.
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
*
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
- * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ */
+
+/*
+ * @test TestGCBasherWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @requires vm.flavor == "server" & !vm.emulatedClient & !vm.graal.enabled
+ * @summary Stress the Shenandoah GC by trying to make old objects more likely to be garbage than young objects.
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
+ *
+ * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * gc.stress.gcbasher.TestGCBasherWithShenandoah 120000
*/
public class TestGCBasherWithShenandoah {
public static void main(String[] args) throws IOException {
--- a/test/hotspot/jtreg/gc/stress/gclocker/TestGCLockerWithShenandoah.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/stress/gclocker/TestGCLockerWithShenandoah.java Sun Jul 07 20:28:41 2019 -0400
@@ -30,10 +30,25 @@
* @library /
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @summary Stress Shenandoah's JNI handling by calling GetPrimitiveArrayCritical while concurrently filling up old gen.
- * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ShenandoahVerify -XX:+UseShenandoahGC gc.stress.gclocker.TestGCLockerWithShenandoah
- * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.stress.gclocker.TestGCLockerWithShenandoah
- * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseShenandoahGC -XX:+ShenandoahOOMDuringEvacALot -XX:ShenandoahGCHeuristics=aggressive gc.stress.gclocker.TestGCLockerWithShenandoah
- * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseShenandoahGC -XX:+ShenandoahAllocFailureALot -XX:ShenandoahGCHeuristics=aggressive gc.stress.gclocker.TestGCLockerWithShenandoah
+ *
+ * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:+ShenandoahVerify
+ * gc.stress.gclocker.TestGCLockerWithShenandoah
+ *
+ * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC
+ * gc.stress.gclocker.TestGCLockerWithShenandoah
+ *
+ * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * gc.stress.gclocker.TestGCLockerWithShenandoah
+ *
+ * @run main/native/othervm/timeout=200 -Xlog:gc*=info -Xms1500m -Xmx1500m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * gc.stress.gclocker.TestGCLockerWithShenandoah
*/
public class TestGCLockerWithShenandoah {
public static void main(String[] args) {
--- a/test/hotspot/jtreg/gc/stress/gcold/TestGCOldWithShenandoah.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/stress/gcold/TestGCOldWithShenandoah.java Sun Jul 07 20:28:41 2019 -0400
@@ -31,22 +31,93 @@
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @summary Stress the GC by trying to make old objects more likely to be garbage than young objects.
*
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:+ShenandoahDegeneratedGC gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=passive -XX:-ShenandoahDegeneratedGC gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:+ShenandoahDegeneratedGC
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive
+ * -XX:-ShenandoahDegeneratedGC
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ */
+
+/*
+ * @test TestGCOldWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @summary Stress the GC by trying to make old objects more likely to be garbage than young objects.
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
*
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahAllocFailureALot gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * -XX:+ShenandoahVerify
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ */
+
+/*
+ * @test TestGCOldWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @summary Stress the GC by trying to make old objects more likely to be garbage than young objects.
*
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive -XX:+ShenandoahVerify gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal -XX:+ShenandoahVerify gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahOOMDuringEvacALot
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * -XX:+ShenandoahAllocFailureALot
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
*
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact gc.stress.gcold.TestGCOld 50 1 20 10 10000
- * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal -XX:ShenandoahGCHeuristics=aggressive
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm/timeout=600 -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
+ *
+ * @run main/othervm -Xmx384M -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * gc.stress.gcold.TestGCOld 50 1 20 10 10000
*/
public class TestGCOldWithShenandoah {
--- a/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGCWithShenandoah.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/hotspot/jtreg/gc/stress/systemgc/TestSystemGCWithShenandoah.java Sun Jul 07 20:28:41 2019 -0400
@@ -31,9 +31,30 @@
* @library /
* @requires vm.gc.Shenandoah & !vm.graal.enabled
* @summary Stress the Shenandoah GC full GC by allocating objects of different lifetimes concurrently with System.gc().
- * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ShenandoahVerify -XX:+UseShenandoahGC gc.stress.systemgc.TestSystemGCWithShenandoah 270
- * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+ShenandoahVerify -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=traversal gc.stress.systemgc.TestSystemGCWithShenandoah 270
- * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC gc.stress.systemgc.TestSystemGCWithShenandoah 270
+ *
+ * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC
+ * -XX:+ShenandoahVerify
+ * gc.stress.systemgc.TestSystemGCWithShenandoah 270
+ *
+ * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC
+ * gc.stress.systemgc.TestSystemGCWithShenandoah 270
+ */
+
+/*
+ * @test TestSystemGCWithShenandoah
+ * @key gc
+ * @key stress
+ * @library /
+ * @requires vm.gc.Shenandoah & !vm.graal.enabled
+ * @summary Stress the Shenandoah GC full GC by allocating objects of different lifetimes concurrently with System.gc().
+ *
+ * @run main/othervm/timeout=300 -Xlog:gc*=info -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
+ * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=traversal
+ * -XX:+ShenandoahVerify
+ * gc.stress.systemgc.TestSystemGCWithShenandoah 270
+ *
*/
public class TestSystemGCWithShenandoah {
public static void main(String[] args) throws Exception {
--- a/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java Sun Jul 07 20:28:41 2019 -0400
@@ -28,9 +28,12 @@
* @summary Test uses custom launcher that starts VM using JNI that verifies
* reflection API with null caller class
* @library /test/lib
+ * @requires os.family != "aix"
* @run main/native CallerAccessTest
*/
+// Test disabled on AIX since we cannot invoke the JVM on the primordial thread.
+
import java.io.File;
import java.util.Map;
import jdk.test.lib.Platform;
--- a/test/jdk/java/net/NetworkInterface/NetworkInterfaceRetrievalTests.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/jdk/java/net/NetworkInterface/NetworkInterfaceRetrievalTests.java Sun Jul 07 20:28:41 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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
@@ -23,17 +23,21 @@
/**
* @test
- * @bug 8179559
+ * @bug 8179559 8225239
*/
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
+import java.lang.reflect.Method;
public class NetworkInterfaceRetrievalTests {
public static void main(String[] args) throws Exception {
int checkFailureCount = 0;
+ Method isBound = NetworkInterface.class.getDeclaredMethod("isBoundInetAddress", InetAddress.class);
+ isBound.setAccessible(true);
+
try {
Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces();
@@ -58,6 +62,13 @@
checkFailureCount++;
}
+ // Any bound address should return true when calling isBoundInetAddress
+ if (!((boolean)isBound.invoke(null, addr))) {
+ System.out.println("Retreived net if bound addr " + addr
+ + "NOT shown as bound using NetworkInterface.isBoundAddress "
+ + "***********");
+ checkFailureCount++;
+ }
}
}
--- a/test/jdk/java/nio/file/Files/Misc.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/jdk/java/nio/file/Files/Misc.java Sun Jul 07 20:28:41 2019 -0400
@@ -22,11 +22,14 @@
*/
/* @test
- * @bug 4313887 6838333 8005566 8032220 8215467
+ * @bug 4313887 6838333 8005566 8032220 8215467 8227080
* @summary Unit test for miscellenous methods in java.nio.file.Files
* @library ..
*/
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.channels.ClosedChannelException;
import java.nio.file.*;
import static java.nio.file.Files.*;
import static java.nio.file.LinkOption.*;
@@ -44,6 +47,7 @@
testIsSameFile(dir);
testFileTypeMethods(dir);
testAccessMethods(dir);
+ testSkip(dir);
} finally {
TestUtil.removeAll(dir);
}
@@ -372,6 +376,38 @@
}
}
+ /**
+ * Tests Files.newInputStream(Path).skip().
+ */
+ static void testSkip(Path tmpdir) throws IOException {
+ Path file = createFile(tmpdir.resolve("foo"));
+ try (OutputStream out = Files.newOutputStream(file)) {
+ byte[] blah = new byte[8192];
+ Arrays.fill(blah, (byte)42);
+ out.write(blah);
+ out.close();
+ try (InputStream in = Files.newInputStream(file)) {
+ assertTrue(in.skip(-1) == 0);
+ assertTrue(in.skip(0) == 0);
+ assertTrue(in.skip(blah.length/4) == blah.length/4);
+ assertTrue(in.skip(blah.length/2) == blah.length/2);
+ assertTrue(in.skip(Long.MAX_VALUE) == blah.length/4);
+ in.close();
+ try {
+ long n = in.skip(1);
+ throw new RuntimeException("skip() did not fail");
+ } catch (IOException ioe) {
+ if (!(ioe.getCause() instanceof ClosedChannelException)) {
+ throw new RuntimeException
+ ("IOException not caused by ClosedChannelException");
+ }
+ }
+ }
+ } finally {
+ delete(file);
+ }
+ }
+
static void assertTrue(boolean okay) {
if (!okay)
throw new RuntimeException("Assertion Failed");
--- a/test/jdk/java/util/Locale/SoftKeys.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/jdk/java/util/Locale/SoftKeys.java Sun Jul 07 20:28:41 2019 -0400
@@ -24,10 +24,10 @@
* @test
* @bug 8196869
* @summary Make sure we deal with internal Key data being cleared properly
- * @run main/othervm -Xms16m -Xmx16m -esa SoftKeys
* @ignore This test aims to provoke NPEs, but due to the need to constrain
* memory usage it fails intermittently with OOME on various systems
* with no way to ignore such failures.
+ * @run main/othervm -Xms16m -Xmx16m -esa SoftKeys
*/
import java.util.*;
--- a/test/jdk/sun/security/krb5/auto/KDC.java Sun Jul 07 19:40:48 2019 -0400
+++ b/test/jdk/sun/security/krb5/auto/KDC.java Sun Jul 07 20:28:41 2019 -0400
@@ -1274,7 +1274,17 @@
PAData[] inPAs = KDCReqDotPAData(asReq);
List<PAData> enc_outPAs = new ArrayList<>();
- if (inPAs == null || inPAs.length == 0) {
+
+ byte[] paEncTimestamp = null;
+ if (inPAs != null) {
+ for (PAData inPA : inPAs) {
+ if (inPA.getType() == Krb5.PA_ENC_TIMESTAMP) {
+ paEncTimestamp = inPA.getValue();
+ }
+ }
+ }
+
+ if (paEncTimestamp == null) {
Object preauth = options.get(Option.PREAUTH_REQUIRED);
if (preauth == null || preauth.equals(Boolean.TRUE)) {
throw new KrbException(Krb5.KDC_ERR_PREAUTH_REQUIRED);
@@ -1283,7 +1293,7 @@
EncryptionKey pakey = null;
try {
EncryptedData data = newEncryptedData(
- new DerValue(inPAs[0].getValue()));
+ new DerValue(paEncTimestamp));
pakey = keyForUser(body.cname, data.getEType(), false);
data.decrypt(pakey, KeyUsage.KU_PA_ENC_TS);
} catch (Exception e) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/recovery/LocalVarHiding.java Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2019, 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
+ * @bug 8227010
+ * @summary Verify error recovery after variable redeclaration
+ * @compile/fail/ref=LocalVarHiding.out -XDrawDiagnostics LocalVarHiding.java
+ */
+
+public class LocalVarHiding {
+ public void test(Decl l1) {
+ System.err.println(l1.originalMethod());
+
+ OverrideVar l1 = new OverrideVar();
+
+ System.err.println(l1.overrideMethod());
+
+ Decl l2 = new Decl();
+
+ System.err.println(l2.originalMethod());
+
+ OverrideVar l2 = new OverrideVar();
+
+ System.err.println(l2.overrideMethod());
+
+ Decl l3 = new Decl();
+
+ System.err.println(l3.originalMethod());
+
+ {
+ OverrideVar l3 = new OverrideVar();
+
+ System.err.println(l3.overrideMethod());
+ }
+
+ Decl l4 = new Decl();
+
+ System.err.println(l4.originalMethod());
+
+ try {
+ throw new OverrideVar();
+ } catch (OverrideVar l4) {
+ System.err.println(l4.overrideMethod());
+ }
+
+ Decl l5 = new Decl();
+
+ System.err.println(l5.originalMethod());
+
+ try (OverrideVar l5 = null) {
+ System.err.println(l5.overrideMethod());
+ }
+
+ Decl l6 = new Decl();
+
+ System.err.println(l6.originalMethod());
+
+ I i1 = l6 -> {
+ System.err.println(l6.overrideMethod());
+ };
+ I i2 = (OverrideVar l6) -> {
+ System.err.println(l6.overrideMethod());
+ };
+ }
+
+ public class Decl {
+ public int originalMethod() {}
+ }
+
+ public class OverrideVar extends Exception implements AutoCloseable {
+ @Override public void close() throws Exception {}
+ public int overrideMethod() {}
+ }
+
+ public interface I {
+ public void run(OverrideVar ov);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/recovery/LocalVarHiding.out Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,8 @@
+LocalVarHiding.java:35:21: compiler.err.already.defined: kindname.variable, l1, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:43:21: compiler.err.already.defined: kindname.variable, l2, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:52:25: compiler.err.already.defined: kindname.variable, l3, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:63:30: compiler.err.already.defined: kindname.variable, l4, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:71:26: compiler.err.already.defined: kindname.variable, l5, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:79:16: compiler.err.already.defined: kindname.variable, l6, kindname.method, test(LocalVarHiding.Decl)
+LocalVarHiding.java:82:29: compiler.err.already.defined: kindname.variable, l6, kindname.method, test(LocalVarHiding.Decl)
+7 errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/micro/org/openjdk/bench/java/net/NetworkInterfaceLookup.java Sun Jul 07 20:28:41 2019 -0400
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+package org.openjdk.bench.java.net;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Assess time to perform native NetworkInterface lookups; uses
+ * reflection to access both package-private isBoundInetAddress and
+ * public getByInetAddress (to get comparable numbers)
+ */
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.SECONDS)
+@State(Scope.Thread)
+@Fork(2)
+@Warmup(iterations = 5, time = 2)
+@Measurement(iterations = 10, time = 2)
+public class NetworkInterfaceLookup {
+
+ static final InetAddress address = InetAddress.getLoopbackAddress();
+
+ static final Method isBoundInetAddress_method;
+
+ static final Method getByInetAddress_method;
+
+ static {
+ Method isBound = null;
+ Method getByInet = null;
+
+ try {
+ isBound = NetworkInterface.class.getDeclaredMethod("isBoundInetAddress", InetAddress.class);
+ isBound.setAccessible(true);
+ } catch (Exception e) {
+ System.out.println("NetworkInterface.isBoundInetAddress not found");
+ }
+
+ try {
+ getByInet = NetworkInterface.class.getDeclaredMethod("getByInetAddress", InetAddress.class);
+ } catch (Exception e) {
+ System.out.println("NetworkInterface.getByInetAddress not found");
+ }
+ isBoundInetAddress_method = isBound;
+ getByInetAddress_method = getByInet;
+ }
+
+ @Benchmark
+ public boolean bound() throws Exception {
+ return (boolean)isBoundInetAddress_method.invoke(null, address);
+ }
+
+ @Benchmark
+ public NetworkInterface getByInetAddress() throws Exception {
+ return (NetworkInterface)getByInetAddress_method.invoke(null, address);
+ }
+}