1 /*
2 * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test id=default
26 * @summary Test clone barriers work correctly
27 * @requires vm.gc.Shenandoah
28 *
29 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
30 * -XX:+UseShenandoahGC
31 * TestClone
32 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
33 * -XX:+UseShenandoahGC
34 * -Xint
35 * TestClone
36 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
37 * -XX:+UseShenandoahGC
38 * -XX:-TieredCompilation
39 * TestClone
40 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
41 * -XX:+UseShenandoahGC
42 * -XX:TieredStopAtLevel=1
43 * TestClone
44 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
45 * -XX:+UseShenandoahGC
46 * -XX:TieredStopAtLevel=4
47 * TestClone
48 */
49
50 /*
51 * @test id=default-verify
52 * @summary Test clone barriers work correctly
53 * @requires vm.gc.Shenandoah
54 *
55 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
56 * -XX:+UseShenandoahGC
57 * -XX:+ShenandoahVerify
58 * TestClone
59 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
60 * -XX:+UseShenandoahGC
61 * -XX:+ShenandoahVerify
62 * -Xint
63 * TestClone
64 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
65 * -XX:+UseShenandoahGC
66 * -XX:+ShenandoahVerify
67 * -XX:-TieredCompilation
68 * TestClone
69 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
70 * -XX:+UseShenandoahGC
71 * -XX:+ShenandoahVerify
72 * -XX:TieredStopAtLevel=1
73 * TestClone
74 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
75 * -XX:+UseShenandoahGC
76 * -XX:+ShenandoahVerify
77 * -XX:TieredStopAtLevel=4
78 * TestClone
79 */
80
81 /*
82 * @test id=aggressive
83 * @summary Test clone barriers work correctly
84 * @requires vm.gc.Shenandoah
85 *
86 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
87 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
88 * TestClone
89 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
90 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
91 * -Xint
92 * TestClone
93 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
94 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
95 * -XX:-TieredCompilation
96 * TestClone
97 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
98 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
99 * -XX:TieredStopAtLevel=1
100 * TestClone
101 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
102 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
103 * -XX:TieredStopAtLevel=4
104 * TestClone
105 */
106
107 /*
108 * @test id=no-coops
109 * @summary Test clone barriers work correctly
110 * @requires vm.gc.Shenandoah
111 * @requires vm.bits == "64"
112 *
113 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
114 * -XX:-UseCompressedOops
115 * -XX:+UseShenandoahGC
116 * TestClone
117 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
118 * -XX:-UseCompressedOops
119 * -XX:+UseShenandoahGC
120 * -Xint
121 * TestClone
122 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
123 * -XX:-UseCompressedOops
124 * -XX:+UseShenandoahGC
125 * -XX:-TieredCompilation
126 * TestClone
127 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
128 * -XX:-UseCompressedOops
129 * -XX:+UseShenandoahGC
130 * -XX:TieredStopAtLevel=1
131 * TestClone
132 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
133 * -XX:-UseCompressedOops
134 * -XX:+UseShenandoahGC
135 * -XX:TieredStopAtLevel=4
136 * TestClone
137 */
138
139 /*
140 * @test id=no-coops-verify
141 * @summary Test clone barriers work correctly
142 * @requires vm.gc.Shenandoah
143 * @requires vm.bits == "64"
144 *
145 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
146 * -XX:-UseCompressedOops
147 * -XX:+UseShenandoahGC
148 * -XX:+ShenandoahVerify
149 * TestClone
150 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
151 * -XX:-UseCompressedOops
152 * -XX:+UseShenandoahGC
153 * -XX:+ShenandoahVerify
154 * -Xint
155 * TestClone
156 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
157 * -XX:-UseCompressedOops
158 * -XX:+UseShenandoahGC
159 * -XX:+ShenandoahVerify
160 * -XX:-TieredCompilation
161 * TestClone
162 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
163 * -XX:-UseCompressedOops
164 * -XX:+UseShenandoahGC
165 * -XX:+ShenandoahVerify
166 * -XX:TieredStopAtLevel=1
167 * TestClone
168 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
169 * -XX:-UseCompressedOops
170 * -XX:+UseShenandoahGC
171 * -XX:+ShenandoahVerify
172 * -XX:TieredStopAtLevel=4
173 * TestClone
174 */
175
176 /*
177 * @test id=no-coops-aggressive
178 * @summary Test clone barriers work correctly
179 * @requires vm.gc.Shenandoah
180 * @requires vm.bits == "64"
181 *
182 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
183 * -XX:-UseCompressedOops
184 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
185 * TestClone
186 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
187 * -XX:-UseCompressedOops
188 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
189 * -Xint
190 * TestClone
191 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
192 * -XX:-UseCompressedOops
193 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
194 * -XX:-TieredCompilation
195 * TestClone
196 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
197 * -XX:-UseCompressedOops
198 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
199 * -XX:TieredStopAtLevel=1
200 * TestClone
201 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xms1g -Xmx1g
202 * -XX:-UseCompressedOops
203 * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
204 * -XX:TieredStopAtLevel=4
205 * TestClone
206 */
207
208
209 public class TestClone {
210
211 public static void main(String[] args) throws Exception {
212 for (int i = 0; i < 10000; i++) {
213 Object[] src = new Object[i];
214 for (int c = 0; c < src.length; c++) {
215 src[c] = new Object();
216 }
217 testWith(src);
218 }
219 }
220
221 static void testWith(Object[] src) {
222 Object[] dst = src.clone();
223 int srcLen = src.length;
224 int dstLen = dst.length;
225 if (srcLen != dstLen) {
226 throw new IllegalStateException("Lengths do not match: " + srcLen + " vs " + dstLen);
227 }
228 for (int c = 0; c < src.length; c++) {
229 Object s = src[c];
230 Object d = dst[c];
231 if (s != d) {
232 throw new IllegalStateException("Elements do not match at " + c + ": " + s + " vs " + d);
233 }
234 }
235 }
236 }