1 /* 2 * Copyright (c) 2017, 2020, Red Hat, Inc. All rights reserved. 3 * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26 /** 27 * @test id=passive 28 * @summary Test Shenandoah GC uses concurrent/parallel threads correctly 29 * @requires vm.gc.Shenandoah 30 * 31 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 32 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive 33 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 34 * -Dtarget=1000 35 * TestGCThreadGroups 36 */ 37 38 /** 39 * @test id=default 40 * @summary Test Shenandoah GC uses concurrent/parallel threads correctly 41 * @requires vm.gc.Shenandoah 42 * 43 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 44 * -XX:+UseShenandoahGC 45 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 46 * -Dtarget=1000 47 * TestGCThreadGroups 48 * 49 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 50 * -XX:+UseShenandoahGC 51 * -XX:-UseDynamicNumberOfGCThreads 52 * -Dtarget=1000 53 * TestGCThreadGroups 54 * 55 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 56 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive 57 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 58 * -Dtarget=1000 59 * TestGCThreadGroups 60 * 61 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 62 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static 63 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 64 * -Dtarget=1000 65 * TestGCThreadGroups 66 * 67 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 68 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact 69 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 70 * -Dtarget=100 71 * TestGCThreadGroups 72 * 73 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 74 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive 75 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 76 * -Dtarget=100 77 * TestGCThreadGroups 78 */ 79 80 /** 81 * @test id=generational 82 * @summary Test Shenandoah GC uses concurrent/parallel threads correctly 83 * @requires vm.gc.Shenandoah 84 * 85 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 86 * -XX:+UseShenandoahGC 87 * -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4 88 * -Dtarget=1000 -XX:ShenandoahGCMode=generational 89 * TestGCThreadGroups 90 * 91 * @run main/othervm -Xmx16m -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 92 * -XX:+UseShenandoahGC 93 * -XX:-UseDynamicNumberOfGCThreads 94 * -Dtarget=1000 -XX:ShenandoahGCMode=generational 95 * TestGCThreadGroups 96 */ 97 98 public class TestGCThreadGroups { 99 100 static final long TARGET_MB = Long.getLong("target", 10_000); // 10 Gb allocation, around 1K cycles to handle 101 static final long STRIDE = 100_000; 102 103 static volatile Object sink; 104 105 public static void main(String[] args) throws Exception { 106 long count = TARGET_MB * 1024 * 1024 / 16; 107 for (long c = 0; c < count; c += STRIDE) { 108 for (long s = 0; s < STRIDE; s++) { 109 sink = new Object(); 110 } 111 Thread.sleep(1); 112 } 113 } 114 115 }