1 /* 2 * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved. 3 * 4 * This code is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU General Public License version 2 only, as 6 * published by the Free Software Foundation. 7 * 8 * This code is distributed in the hope that it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 11 * version 2 for more details (a copy is included in the LICENSE file that 12 * accompanied this code). 13 * 14 * You should have received a copy of the GNU General Public License version 15 * 2 along with this work; if not, write to the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 17 * 18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19 * or visit www.oracle.com if you need additional information or have any 20 * questions. 21 * 22 */ 23 24 /* 25 * @test TestSieveObjects 26 * @summary Acceptance tests: collector can deal with retained objects 27 * @key gc 28 * 29 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 30 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive 31 * -XX:+ShenandoahDegeneratedGC -XX:+ShenandoahVerify 32 * TestSieveObjects 33 * 34 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 35 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive 36 * -XX:-ShenandoahDegeneratedGC -XX:+ShenandoahVerify 37 * TestSieveObjects 38 * 39 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 40 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive 41 * -XX:+ShenandoahDegeneratedGC 42 * TestSieveObjects 43 * 44 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 45 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=passive 46 * -XX:-ShenandoahDegeneratedGC 47 * TestSieveObjects 48 */ 49 50 /* 51 * @test TestSieveObjects 52 * @summary Acceptance tests: collector can deal with retained objects 53 * @key gc 54 * 55 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 56 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive 57 * -XX:+ShenandoahOOMDuringEvacALot 58 * TestSieveObjects 59 * 60 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 61 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive 62 * -XX:+ShenandoahAllocFailureALot 63 * TestSieveObjects 64 * 65 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 66 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive 67 * TestSieveObjects 68 */ 69 70 /* 71 * @test TestSieveObjects 72 * @summary Acceptance tests: collector can deal with retained objects 73 * @key gc 74 * 75 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 76 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive 77 * -XX:+ShenandoahVerify 78 * TestSieveObjects 79 * 80 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 81 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive 82 * TestSieveObjects 83 * 84 */ 85 86 /* 87 * @test TestSieveObjects 88 * @summary Acceptance tests: collector can deal with retained objects 89 * @key gc 90 * 91 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 92 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static 93 * TestSieveObjects 94 */ 95 96 /* 97 * @test TestSieveObjects 98 * @summary Acceptance tests: collector can deal with retained objects 99 * @key gc 100 * 101 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 102 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact 103 * TestSieveObjects 104 */ 105 106 /* 107 * @test TestSieveObjects 108 * @summary Acceptance tests: collector can deal with retained objects 109 * @key gc 110 * 111 * @run main/othervm/timeout=240 -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 112 * -XX:+UseShenandoahGC 113 * -XX:-UseTLAB -XX:+ShenandoahVerify 114 * TestSieveObjects 115 */ 116 117 /* 118 * @test TestSieveObjects 119 * @summary Acceptance tests: collector can deal with retained objects 120 * @key gc 121 * 122 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 123 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGCHeuristics=aggressive 124 * -XX:+ShenandoahOOMDuringEvacALot 125 * TestSieveObjects 126 * 127 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 128 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGCHeuristics=aggressive 129 * -XX:+ShenandoahAllocFailureALot 130 * TestSieveObjects 131 * 132 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 133 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGCHeuristics=aggressive 134 * TestSieveObjects 135 */ 136 137 /* 138 * @test TestSieveObjects 139 * @summary Acceptance tests: collector can deal with retained objects 140 * @key gc 141 * 142 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 143 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu 144 * -XX:+ShenandoahVerify 145 * TestSieveObjects 146 * 147 * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 148 * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu 149 * TestSieveObjects 150 */ 151 152 import java.util.concurrent.ThreadLocalRandom; 153 154 public class TestSieveObjects { 155 156 static final int COUNT = 100_000_000; 157 static final int WINDOW = 1_000_000; 158 static final int PAYLOAD = 100; 159 160 static final MyObject[] arr = new MyObject[WINDOW]; 161 162 public static void main(String[] args) throws Exception { 163 int rIdx = 0; 164 for (int c = 0; c < COUNT; c++) { 165 MyObject v = arr[rIdx]; 166 if (v != null) { 167 if (v.x != rIdx) { 168 throw new IllegalStateException("Illegal value at index " + rIdx + ": " + v.x); 169 } 170 if (ThreadLocalRandom.current().nextInt(1000) > 100) { 171 arr[rIdx] = null; 172 } 173 } else { 174 if (ThreadLocalRandom.current().nextInt(1000) > 500) { 175 arr[rIdx] = new MyObject(rIdx); 176 } 177 } 178 rIdx++; 179 if (rIdx >= WINDOW) { 180 rIdx = 0; 181 } 182 } 183 } 184 185 public static class MyObject { 186 public int x; 187 public byte[] payload; 188 189 public MyObject(int x) { 190 this.x = x; 191 this.payload = new byte[PAYLOAD]; 192 } 193 } 194 195 }