Mercurial > hg > openjdk > jdk9 > hotspot
changeset 11803:ca049b1e1a25
Merge
author | iveresov |
---|---|
date | Fri, 05 Aug 2016 13:37:53 -0700 |
parents | 8d2289c7602f (current diff) 28e24d221653 (diff) |
children | 5a9d33dfe6e8 |
files | src/share/vm/prims/whitebox.cpp |
diffstat | 28 files changed, 176 insertions(+), 144 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Fri Aug 05 16:23:44 2016 +0300 +++ b/.hgtags Fri Aug 05 13:37:53 2016 -0700 @@ -532,3 +532,4 @@ 352357128f602dcf0426b1cbe011a4685a4d9f97 jdk-9+127 22bf6db9767b1b3a1994cbf32eb3331f31ae2093 jdk-9+128 e96b34b76d863ed1fa04e0eeb3f297ac17b490fd jdk-9+129 +7d54c7056328b6a2bf4877458b8f4d8cd870f93b jdk-9+130
--- a/make/test/JtregNative.gmk Fri Aug 05 16:23:44 2016 +0300 +++ b/make/test/JtregNative.gmk Fri Aug 05 13:37:53 2016 -0700 @@ -50,7 +50,6 @@ $(HOTSPOT_TOPDIR)/test/runtime/BoolReturn \ $(HOTSPOT_TOPDIR)/test/compiler/floatingpoint/ \ $(HOTSPOT_TOPDIR)/test/compiler/calls \ - $(HOTSPOT_TOPDIR)/test/compiler/native \ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/GetNamedModule \ $(HOTSPOT_TOPDIR)/test/testlibrary/jvmti \ $(HOTSPOT_TOPDIR)/test/compiler/jvmci/jdk.vm.ci.code.test \
--- a/src/cpu/aarch64/vm/frame_aarch64.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/cpu/aarch64/vm/frame_aarch64.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -110,17 +110,7 @@ // Entry frame checks if (is_entry_frame()) { // an entry frame must have a valid fp. - - if (!fp_safe) return false; - - // Validate the JavaCallWrapper an entry frame must have - - address jcw = (address)entry_frame_call_wrapper(); - - bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > fp); - - return jcw_safe; - + return fp_safe && is_entry_frame_valid(thread); } intptr_t* sender_sp = NULL; @@ -210,15 +200,8 @@ } // construct the potential sender - frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc); - - // Validate the JavaCallWrapper an entry frame must have - address jcw = (address)sender.entry_frame_call_wrapper(); - - bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > (address)sender.fp()); - - return jcw_safe; + return sender.is_entry_frame_valid(thread); } CompiledMethod* nm = sender_blob->as_compiled_method_or_null();
--- a/src/cpu/sparc/vm/frame_sparc.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/cpu/sparc/vm/frame_sparc.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -225,19 +225,7 @@ // Entry frame checks if (is_entry_frame()) { // an entry frame must have a valid fp. - - if (!fp_safe) { - return false; - } - - // Validate the JavaCallWrapper an entry frame must have - - address jcw = (address)entry_frame_call_wrapper(); - - bool jcw_safe = (jcw <= thread->stack_base()) && ( jcw > _FP); - - return jcw_safe; - + return fp_safe && is_entry_frame_valid(thread); } intptr_t* younger_sp = sp(); @@ -290,14 +278,8 @@ return false; } - if( sender.is_entry_frame()) { - // Validate the JavaCallWrapper an entry frame must have - - address jcw = (address)sender.entry_frame_call_wrapper(); - - bool jcw_safe = (jcw <= thread->stack_base()) && ( jcw > sender_fp); - - return jcw_safe; + if (sender.is_entry_frame()) { + return sender.is_entry_frame_valid(thread); } // If the frame size is 0 something (or less) is bad because every nmethod has a non-zero frame size
--- a/src/cpu/sparc/vm/register_definitions_sparc.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/cpu/sparc/vm/register_definitions_sparc.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,9 @@ // make sure the defines don't screw up the declarations later on in this file #define DONT_USE_REGISTER_DEFINES -#include "precompiled.hpp" +// Note: precompiled headers can not be used in this file because of the above +// definition + #include "asm/assembler.hpp" #include "asm/register.hpp" #include "interp_masm_sparc.hpp"
--- a/src/cpu/x86/vm/frame_x86.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/cpu/x86/vm/frame_x86.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -108,17 +108,7 @@ // Entry frame checks if (is_entry_frame()) { // an entry frame must have a valid fp. - - if (!fp_safe) return false; - - // Validate the JavaCallWrapper an entry frame must have - - address jcw = (address)entry_frame_call_wrapper(); - - bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > fp); - - return jcw_safe; - + return fp_safe && is_entry_frame_valid(thread); } intptr_t* sender_sp = NULL; @@ -209,15 +199,8 @@ } // construct the potential sender - frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc); - - // Validate the JavaCallWrapper an entry frame must have - address jcw = (address)sender.entry_frame_call_wrapper(); - - bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > (address)sender.fp()); - - return jcw_safe; + return sender.is_entry_frame_valid(thread); } CompiledMethod* nm = sender_blob->as_compiled_method_or_null();
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/BreakpointInfo.java Fri Aug 05 16:23:44 2016 +0300 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/BreakpointInfo.java Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/MethodCounters.java Fri Aug 05 16:23:44 2016 +0300 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/MethodCounters.java Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it
--- a/src/share/vm/classfile/classLoaderData.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/classfile/classLoaderData.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -1173,7 +1173,7 @@ if (class_loader() == NULL) { out->print("NULL class_loader"); } else { - out->print("class loader " INTPTR_FORMAT, p2i(this)); + out->print("class loader " INTPTR_FORMAT " ", p2i(this)); class_loader()->print_value_on(out); } }
--- a/src/share/vm/gc/g1/g1Analytics.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/gc/g1/g1Analytics.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -316,8 +316,12 @@ return get_new_size_prediction(_pending_cards_seq); } +double G1Analytics::oldest_known_gc_end_time_sec() const { + return _recent_prev_end_times_for_all_gcs_sec->oldest(); +} + double G1Analytics::last_known_gc_end_time_sec() const { - return _recent_prev_end_times_for_all_gcs_sec->oldest(); + return _recent_prev_end_times_for_all_gcs_sec->last(); } void G1Analytics::update_recent_gc_times(double end_time_sec,
--- a/src/share/vm/gc/g1/g1Analytics.hpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/gc/g1/g1Analytics.hpp Fri Aug 05 13:37:53 2016 -0700 @@ -155,6 +155,7 @@ void update_recent_gc_times(double end_time_sec, double elapsed_ms); void compute_pause_time_ratio(double interval_ms, double pause_time_ms); + double oldest_known_gc_end_time_sec() const; double last_known_gc_end_time_sec() const; };
--- a/src/share/vm/gc/g1/g1CollectedHeap.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -28,6 +28,7 @@ #include "classfile/symbolTable.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" +#include "gc/g1/g1Analytics.hpp" #include "gc/g1/bufferingOopClosure.hpp" #include "gc/g1/concurrentG1Refine.hpp" #include "gc/g1/concurrentG1RefineThread.hpp" @@ -2473,8 +2474,19 @@ } jlong G1CollectedHeap::millis_since_last_gc() { - // assert(false, "NYI"); - return 0; + jlong now = os::elapsed_counter() / NANOSECS_PER_MILLISEC; + const G1Analytics* analytics = _g1_policy->analytics(); + double last = analytics->last_known_gc_end_time_sec(); + jlong ret_val = now - (last * 1000); + if (ret_val < 0) { + // See the notes in GenCollectedHeap::millis_since_last_gc() + // for more information about the implementation. + log_warning(gc)("Detected clock going backwards. " + "Milliseconds since last GC would be " JLONG_FORMAT + ". returning zero instead.", ret_val); + return 0; + } + return ret_val; } void G1CollectedHeap::prepare_for_verify() {
--- a/src/share/vm/gc/g1/g1DefaultPolicy.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/gc/g1/g1DefaultPolicy.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -604,7 +604,7 @@ _analytics->report_alloc_rate_ms(alloc_rate_ms); double interval_ms = - (end_time_sec - _analytics->last_known_gc_end_time_sec()) * 1000.0; + (end_time_sec - _analytics->oldest_known_gc_end_time_sec()) * 1000.0; _analytics->update_recent_gc_times(end_time_sec, pause_time_ms); _analytics->compute_pause_time_ratio(interval_ms, pause_time_ms); }
--- a/src/share/vm/gc/shared/genCollectedHeap.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/gc/shared/genCollectedHeap.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -1256,21 +1256,21 @@ }; jlong GenCollectedHeap::millis_since_last_gc() { - // We need a monotonically non-decreasing time in ms but - // os::javaTimeMillis() does not guarantee monotonicity. + // javaTimeNanos() is guaranteed to be monotonically non-decreasing + // provided the underlying platform provides such a time source + // (and it is bug free). So we still have to guard against getting + // back a time later than 'now'. jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC; GenTimeOfLastGCClosure tolgc_cl(now); // iterate over generations getting the oldest // time that a generation was collected generation_iterate(&tolgc_cl, false); - // javaTimeNanos() is guaranteed to be monotonically non-decreasing - // provided the underlying platform provides such a time source - // (and it is bug free). So we still have to guard against getting - // back a time later than 'now'. jlong retVal = now - tolgc_cl.time(); if (retVal < 0) { - NOT_PRODUCT(log_warning(gc)("time warp: " JLONG_FORMAT, retVal);) + log_warning(gc)("Detected clock going backwards. " + "Milliseconds since last GC would be " JLONG_FORMAT + ". returning zero instead.", retVal); return 0; } return retVal;
--- a/src/share/vm/oops/methodCounters.hpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/oops/methodCounters.hpp Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it
--- a/src/share/vm/prims/whitebox.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/prims/whitebox.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -350,6 +350,11 @@ return (jlong)alignment; WB_END +WB_ENTRY(jlong, WB_GetHeapAlignment(JNIEnv* env, jobject o)) + size_t alignment = Universe::heap()->collector_policy()->heap_alignment(); + return (jlong)alignment; +WB_END + #if INCLUDE_ALL_GCS WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj)) G1CollectedHeap* g1 = G1CollectedHeap::heap(); @@ -401,14 +406,21 @@ WB_END WB_ENTRY(jlong, WB_PSVirtualSpaceAlignment(JNIEnv* env, jobject o)) - ParallelScavengeHeap* ps = ParallelScavengeHeap::heap(); - size_t alignment = ps->gens()->virtual_spaces()->alignment(); - return (jlong)alignment; +#if INCLUDE_ALL_GCS + if (UseParallelGC) { + return ParallelScavengeHeap::heap()->gens()->virtual_spaces()->alignment(); + } +#endif // INCLUDE_ALL_GCS + THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), "WB_PSVirtualSpaceAlignment: Parallel GC is not enabled"); WB_END WB_ENTRY(jlong, WB_PSHeapGenerationAlignment(JNIEnv* env, jobject o)) - size_t alignment = ParallelScavengeHeap::heap()->generation_alignment(); - return (jlong)alignment; +#if INCLUDE_ALL_GCS + if (UseParallelGC) { + return ParallelScavengeHeap::heap()->generation_alignment(); + } +#endif // INCLUDE_ALL_GCS + THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), "WB_PSHeapGenerationAlignment: Parallel GC is not enabled"); WB_END WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env)) @@ -1694,6 +1706,7 @@ {CC"getVMAllocationGranularity", CC"()J", (void*)&WB_GetVMAllocationGranularity }, {CC"getVMLargePageSize", CC"()J", (void*)&WB_GetVMLargePageSize}, {CC"getHeapSpaceAlignment", CC"()J", (void*)&WB_GetHeapSpaceAlignment}, + {CC"getHeapAlignment", CC"()J", (void*)&WB_GetHeapAlignment}, {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive }, {CC"parseCommandLine0", CC"(Ljava/lang/String;C[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
--- a/src/share/vm/runtime/frame.cpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/runtime/frame.cpp Fri Aug 05 13:37:53 2016 -0700 @@ -225,6 +225,19 @@ return NULL; } +bool frame::is_entry_frame_valid(JavaThread* thread) const { + // Validate the JavaCallWrapper an entry frame must have + address jcw = (address)entry_frame_call_wrapper(); + bool jcw_safe = (jcw < thread->stack_base()) && (jcw > (address)fp()); // less than stack base + if (!jcw_safe) { + return false; + } + + // Validate sp saved in the java frame anchor + JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor(); + return (jfa->last_Java_sp() > sp()); +} + bool frame::should_be_deoptimized() const { if (_deopt_state == is_deoptimized || !is_compiled_frame() ) return false;
--- a/src/share/vm/runtime/frame.hpp Fri Aug 05 16:23:44 2016 +0300 +++ b/src/share/vm/runtime/frame.hpp Fri Aug 05 13:37:53 2016 -0700 @@ -166,6 +166,8 @@ frame sender_for_interpreter_frame(RegisterMap* map) const; frame sender_for_native_frame(RegisterMap* map) const; + bool is_entry_frame_valid(JavaThread* thread) const; + // All frames: // A low-level interface for vframes:
--- a/test/Makefile Fri Aug 05 16:23:44 2016 +0300 +++ b/test/Makefile Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -226,6 +226,9 @@ ( \ jtregExitCode=$$? && \ _summary="$(SUMMARY_TXT)"; \ + if [ $${jtregExitCode} = 1 ] ; then \ + jtregExitCode=0; \ + fi; \ $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \ $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \ if [ -r "$${_summary}" ] ; then \
--- a/test/compiler/codecache/stress/RandomAllocationTest.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/compiler/codecache/stress/RandomAllocationTest.java Fri Aug 05 13:37:53 2016 -0700 @@ -24,6 +24,7 @@ /* * @test RandomAllocationTest + * @key stress * @summary stressing code cache by allocating randomly sized "dummy" code blobs * @library /testlibrary /test/lib / * @modules java.base/jdk.internal.misc
--- a/test/compiler/codecache/stress/UnexpectedDeoptimizationTest.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/compiler/codecache/stress/UnexpectedDeoptimizationTest.java Fri Aug 05 13:37:53 2016 -0700 @@ -24,6 +24,7 @@ /* * @test UnexpectedDeoptimizationTest + * @key stress * @summary stressing code cache by forcing unexpected deoptimizations * @library /testlibrary /test/lib / * @modules java.base/jdk.internal.misc
--- a/test/compiler/codegen/aes/TestAESMain.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/compiler/codegen/aes/TestAESMain.java Fri Aug 05 13:37:53 2016 -0700 @@ -25,6 +25,7 @@ /** * @test * @bug 7184394 + * @key stress * @summary add intrinsics to use AES instructions * @library /testlibrary / * @modules java.base/jdk.internal.misc
--- a/test/compiler/floatingpoint/ModNaN.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/compiler/floatingpoint/ModNaN.java Fri Aug 05 13:37:53 2016 -0700 @@ -26,7 +26,6 @@ * @bug 8015396 * @summary double a%b returns NaN for some (a,b) (|a| < inf, |b|>0) (on Core i7 980X) * - * @ignore 8145543 * @run main compiler.floatingpoint.ModNaN */
--- a/test/gc/arguments/TestNewSizeFlags.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/gc/arguments/TestNewSizeFlags.java Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,13 +60,13 @@ // Test NewSize and MaxNewSize testNewSizeFlags(20 * M, 10 * M, 30 * M, 40 * M, options, false); - testNewSizeFlags(10 * M, 20 * M, 30 * M, 40 * M, options, false); + testNewSizeFlags(10 * M, 20 * M, 30 * M, 80 * M, options, false); testNewSizeFlags(-1, 20 * M, 30 * M, 40 * M, options, false); testNewSizeFlags(10 * M, -1, 30 * M, 40 * M, options, false); testNewSizeFlags(20 * M, 20 * M, 30 * M, 40 * M, options, false); testNewSizeFlags(20 * M, 30 * M, 40 * M, 50 * M, options, false); testNewSizeFlags(30 * M, 100 * M, 150 * M, 200 * M, options, false); - testNewSizeFlags(0, -1, 30 * M, 40 * M, options, false); + testNewSizeFlags(20 * M, 30 * M, 128 * M, 128 * M, options, false); // Test -Xmn testXmnFlags(0, 30 * M, 40 * M, options, true); @@ -88,9 +88,11 @@ long heapSize, long maxHeapSize, LinkedList<String> options, boolean failureExpected) throws Exception { + long expectedNewSize = newSize; + long expectedMaxNewSize = (maxNewSize >= 0 ? Math.max(maxNewSize, newSize) : maxNewSize); testVMOptions(newSize, maxNewSize, heapSize, maxHeapSize, - newSize, (maxNewSize >= 0 ? Math.max(maxNewSize, newSize) : maxNewSize), + expectedNewSize, expectedMaxNewSize, options, failureExpected); } @@ -159,7 +161,9 @@ "-XX:-UseLargePages", NewSizeVerifier.class.getName(), Long.toString(expectedNewSize), - Long.toString(expectedMaxNewSize) + Long.toString(expectedMaxNewSize), + Long.toString(heapSize), + Long.toString(maxHeapSize) ); vmOptions.removeIf(String::isEmpty); ProcessBuilder procBuilder = ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new String[vmOptions.size()])); @@ -177,7 +181,12 @@ */ public static class NewSizeVerifier { - static WhiteBox wb = WhiteBox.getWhiteBox(); + private static final WhiteBox WB = WhiteBox.getWhiteBox(); + private static final GCTypes.YoungGCType YOUNG_GC_TYPE = GCTypes.YoungGCType.getYoungGCType(); + private static final long HEAP_SPACE_ALIGNMENT = WB.getHeapSpaceAlignment(); + private static final long HEAP_ALIGNMENT = WB.getHeapAlignment(); + private static final long PS_VIRTUAL_SPACE_ALIGNMENT = + (YOUNG_GC_TYPE == GCTypes.YoungGCType.PSNew) ? WB.psVirtualSpaceAlignment() : 0; public static final int ARRAY_LENGTH = 100; public static final int CHUNK_SIZE = 1024; @@ -185,63 +194,79 @@ public static byte garbage[][] = new byte[ARRAY_LENGTH][]; public static void main(String args[]) throws Exception { - if (args.length != 2) { - throw new IllegalArgumentException("Expected 2 args: <expectedNewSize> <expectedMaxNewSize>"); + if (args.length != 4) { + throw new IllegalArgumentException("Expected 4 args: <expectedNewSize> <expectedMaxNewSize> <initialHeapSize> <maxHeapSize>"); } final long newSize = Long.valueOf(args[0]); final long maxNewSize = Long.valueOf(args[1]); + final long initialHeapSize = Long.valueOf(args[2]); + final long maxHeapSize = Long.valueOf(args[3]); // verify initial size - verifyNewSize(newSize, maxNewSize); + verifyNewSize(newSize, maxNewSize, initialHeapSize, maxHeapSize); // force GC and verify that size is still correct - AllocationHelper allocator = new AllocationHelper(MAX_ITERATIONS, ARRAY_LENGTH, CHUNK_SIZE, () -> (verifyNewSize(newSize, maxNewSize))); + AllocationHelper allocator = new AllocationHelper(MAX_ITERATIONS, ARRAY_LENGTH, CHUNK_SIZE, () -> (verifyNewSize(newSize, maxNewSize, initialHeapSize, maxHeapSize))); allocator.allocateMemoryAndVerifyNoOOME(); } /** * Verify that actual young gen size conforms NewSize and MaxNewSize values. */ - public static Void verifyNewSize(long newSize, long maxNewSize) { - long alignedNewSize = alignNewSize(newSize); - long alignedMaxNewSize = alignNewSize(maxNewSize); + public static Void verifyNewSize(long newSize, long maxNewSize, + long initialHeapSize, long maxHeapSize) { + long alignedNewSize = alignGenSize(newSize); + long alignedMaxNewSize = alignGenSize(maxNewSize); + long alignedXms = alignHeapSize(initialHeapSize); + long alignedXmx = alignHeapSize(maxHeapSize); MemoryUsage youngGenUsage = getYoungGenUsage(); + long initSize = youngGenUsage.getInit(); + long commitedSize = youngGenUsage.getCommitted(); + long maxSize = youngGenUsage.getMax(); if (newSize != -1) { - if (youngGenUsage.getInit() < alignedNewSize) { + if (initSize < alignedNewSize) { throw new RuntimeException("initial new size < NewSize value: " - + youngGenUsage.getInit() + " < " + alignedNewSize); + + initSize + " < " + alignedNewSize); } - if (youngGenUsage.getCommitted() < alignedNewSize) { + if (commitedSize < alignedNewSize) { throw new RuntimeException("actual new size < NewSize value: " - + youngGenUsage.getCommitted() + " < " + alignedNewSize); + + commitedSize + " < " + alignedNewSize); } // for G1 max new size == committed new size - if (GCTypes.YoungGCType.getYoungGCType() != GCTypes.YoungGCType.G1 - && youngGenUsage.getMax() < alignedNewSize) { + if (YOUNG_GC_TYPE != GCTypes.YoungGCType.G1 + && maxSize < alignedNewSize) { throw new RuntimeException("max new size < NewSize value: " - + youngGenUsage.getMax() + " < " + alignedNewSize); + + maxSize + " < " + alignedNewSize); } } if (maxNewSize != -1) { - if (youngGenUsage.getInit() > alignedMaxNewSize) { + if (initSize > alignedMaxNewSize) { throw new RuntimeException("initial new size > MaxNewSize value: " - + youngGenUsage.getInit() + " > " + alignedMaxNewSize); + + initSize + " > " + alignedMaxNewSize); + } + + if (commitedSize > alignedMaxNewSize) { + throw new RuntimeException("actual new size > MaxNewSize value: " + + commitedSize + " > " + alignedMaxNewSize); } - if (youngGenUsage.getCommitted() > alignedMaxNewSize) { - throw new RuntimeException("actual new size > MaxNewSize value: " - + youngGenUsage.getCommitted() + " > " + alignedMaxNewSize); - } - - if (GCTypes.YoungGCType.getYoungGCType() != GCTypes.YoungGCType.G1 - && youngGenUsage.getMax() != alignedMaxNewSize) { - throw new RuntimeException("max new size != MaxNewSize value: " - + youngGenUsage.getMax() + " != " + alignedMaxNewSize); + if (alignedXms != alignedXmx) { + if (YOUNG_GC_TYPE != GCTypes.YoungGCType.G1 + && maxSize != alignedMaxNewSize) { + throw new RuntimeException("max new size != MaxNewSize value: " + + maxSize + " != " + alignedMaxNewSize); + } + } else { + if (YOUNG_GC_TYPE != GCTypes.YoungGCType.G1 + && maxSize != alignedNewSize) { + throw new RuntimeException("max new size != NewSize for case InitialHeapSize == MaxHeapSize value: " + + maxSize + " != " + alignedNewSize + " HeapSize == " + alignedXms); + } } } return null; @@ -256,41 +281,47 @@ * For all GCs used value is 0. */ private static MemoryUsage getYoungGenUsage() { - if (GCTypes.YoungGCType.getYoungGCType() == GCTypes.YoungGCType.G1) { - return new MemoryUsage(HeapRegionUsageTool.getEdenUsage().getInit() - + HeapRegionUsageTool.getSurvivorUsage().getInit(), - 0, - HeapRegionUsageTool.getEdenUsage().getCommitted() - + HeapRegionUsageTool.getSurvivorUsage().getCommitted(), - Long.MAX_VALUE); + MemoryUsage edenUsage = HeapRegionUsageTool.getEdenUsage(); + MemoryUsage survivorUsage = HeapRegionUsageTool.getSurvivorUsage(); + long edenUsageInit = edenUsage.getInit(); + long edenUsageCommited = edenUsage.getCommitted(); + long survivorUsageInit = survivorUsage.getInit(); + long survivorUsageCommited = survivorUsage.getCommitted(); + + if (YOUNG_GC_TYPE == GCTypes.YoungGCType.G1) { + return new MemoryUsage(edenUsageInit + survivorUsageInit, 0, + edenUsageCommited + survivorUsageCommited, Long.MAX_VALUE); } else { - return new MemoryUsage(HeapRegionUsageTool.getEdenUsage().getInit() - + HeapRegionUsageTool.getSurvivorUsage().getInit() * 2, - 0, - HeapRegionUsageTool.getEdenUsage().getCommitted() - + HeapRegionUsageTool.getSurvivorUsage().getCommitted() * 2, - HeapRegionUsageTool.getEdenUsage().getMax() - + HeapRegionUsageTool.getSurvivorUsage().getMax() * 2); + return new MemoryUsage(edenUsageInit + survivorUsageInit * 2, 0, + edenUsageCommited + survivorUsageCommited * 2, + edenUsage.getMax() + survivorUsage.getMax() * 2); } } /** - * Align value regardful to used young GC. + * Align generation size regardful to used young GC. */ - public static long alignNewSize(long value) { - switch (GCTypes.YoungGCType.getYoungGCType()) { + public static long alignGenSize(long value) { + switch (YOUNG_GC_TYPE) { case DefNew: case ParNew: - return HeapRegionUsageTool.alignDown(value, wb.getHeapSpaceAlignment()); + return HeapRegionUsageTool.alignDown(value, HEAP_SPACE_ALIGNMENT); case PSNew: return HeapRegionUsageTool.alignUp(HeapRegionUsageTool.alignDown(value, - wb.getHeapSpaceAlignment()), - wb.psVirtualSpaceAlignment()); + HEAP_SPACE_ALIGNMENT), + PS_VIRTUAL_SPACE_ALIGNMENT); case G1: - return HeapRegionUsageTool.alignUp(value, wb.g1RegionSize()); + return HeapRegionUsageTool.alignUp(value, WB.g1RegionSize()); default: throw new RuntimeException("Unexpected young GC type"); } } + + /** + * Align heap size. + */ + public static long alignHeapSize(long value){ + return HeapRegionUsageTool.alignUp(value,HEAP_ALIGNMENT); + } } }
--- a/test/gc/g1/ihop/TestIHOPErgo.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/gc/g1/ihop/TestIHOPErgo.java Fri Aug 05 13:37:53 2016 -0700 @@ -24,6 +24,7 @@ /* * @test TestIHOPErgo * @bug 8148397 + * @key stress * @summary Test checks that behavior of Adaptive and Static IHOP at concurrent cycle initiation * @requires vm.gc.G1 * @requires !vm.flightRecorder
--- a/test/runtime/8007320/ConstMethodTest.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/runtime/8007320/ConstMethodTest.java Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 8007320 8014709 + * @bug 8007320 8014709 8163231 * @summary Test all optional fields in ConstMethod * @compile -g -parameters ConstMethodTest.java * @run main ConstMethodTest @@ -122,8 +122,8 @@ equal(ann.length, 3); Annotation foo = ann[0][0]; Annotation bar = ann[1][0]; - equal(foo.toString(), "@Named(value=aName)"); - equal(bar.toString(), "@Named(value=bName)"); + equal(foo.toString(), "@Named(value=\"aName\")"); + equal(bar.toString(), "@Named(value=\"bName\")"); check(foo.equals(foo)); check(bar.equals(bar)); check(! foo.equals(bar)); @@ -131,7 +131,7 @@ Annotation[] ann2 = m.getAnnotations(); equal(ann2.length, 1); Annotation mann = ann2[0]; - equal(mann.toString(), "@MyAnnotation(date=today, name=someName, value=Hello World)"); + equal(mann.toString(), "@MyAnnotation(date=\"today\", name=\"someName\", value=\"Hello World\")"); // Test Method parameter names Parameter[] parameters = m.getParameters(); if(parameters == null)
--- a/test/runtime/RedefineTests/RedefineAnnotations.java Fri Aug 05 16:23:44 2016 +0300 +++ b/test/runtime/RedefineTests/RedefineAnnotations.java Fri Aug 05 13:37:53 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -370,7 +370,7 @@ } private static void verifyTestAnnSite(Annotation testAnn, String expectedSite) { - String expectedAnn = "@TestAnn(site=" + expectedSite + ")"; + String expectedAnn = "@TestAnn(site=\"" + expectedSite + "\")"; assertTrue(testAnn.toString().equals(expectedAnn), "Expected \"" + expectedAnn + "\", got \"" + testAnn + "\""); }
--- a/test/runtime/StackGuardPages/exeinvoke.c Fri Aug 05 16:23:44 2016 +0300 +++ b/test/runtime/StackGuardPages/exeinvoke.c Fri Aug 05 13:37:53 2016 -0700 @@ -242,7 +242,7 @@ CLASS_PATH_OPT, javaclasspath); options[0].optionString = "-Xint"; - options[1].optionString = "-Xss328k"; + options[1].optionString = "-Xss1M"; options[2].optionString = javaclasspathopt; vm_args.version = JNI_VERSION_1_2;