jdk
1/*
2* Copyright (c) 2017, 2018, 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
24package gc.epsilon;25
26/**
27* @test TestRefArrays
28* @key randomness
29* @requires vm.gc.Epsilon
30* @summary Epsilon is able to allocate arrays, and does not corrupt their state
31* @library /test/lib
32*
33* @run main/othervm -XX:+UseTLAB -Xmx256m
34* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
35* gc.epsilon.TestRefArrays
36*
37* @run main/othervm -XX:+UseTLAB -Xmx256m
38* -Xint
39* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
40* gc.epsilon.TestRefArrays
41*
42* @run main/othervm -XX:+UseTLAB -Xmx256m
43* -Xbatch -Xcomp -XX:TieredStopAtLevel=1
44* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
45* gc.epsilon.TestRefArrays
46*
47* @run main/othervm -XX:+UseTLAB -Xmx256m
48* -Xbatch -Xcomp -XX:-TieredCompilation
49* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
50* gc.epsilon.TestRefArrays
51*
52* @run main/othervm -XX:-UseTLAB -Xmx256m
53* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
54* gc.epsilon.TestRefArrays
55*
56* @run main/othervm -XX:-UseTLAB -Xmx256m
57* -Xint
58* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
59* gc.epsilon.TestRefArrays
60*
61* @run main/othervm -XX:-UseTLAB -Xmx256m
62* -Xbatch -Xcomp -XX:TieredStopAtLevel=1
63* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
64* gc.epsilon.TestRefArrays
65*
66* @run main/othervm -XX:-UseTLAB -Xmx256m
67* -Xbatch -Xcomp -XX:-TieredCompilation
68* -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
69* gc.epsilon.TestRefArrays
70*/
71
72import java.util.Random;73import jdk.test.lib.Utils;74
75public class TestRefArrays {76static int COUNT = Integer.getInteger("count", 200); // ~100 MB allocation77
78static MyObject[][] arr;79
80public static void main(String[] args) throws Exception {81Random r = Utils.getRandomInstance();82
83arr = new MyObject[COUNT * 100][];84for (int c = 0; c < COUNT; c++) {85arr[c] = new MyObject[c * 100];86for (int v = 0; v < c; v++) {87arr[c][v] = new MyObject(r.nextInt());88}89}90
91r = new Random(Utils.SEED);92for (int c = 0; c < COUNT; c++) {93MyObject[] b = arr[c];94if (b.length != (c * 100)) {95throw new IllegalStateException("Failure: length = " + b.length + ", need = " + (c*100));96}97for (int v = 0; v < c; v++) {98int actual = b[v].id();99int expected = r.nextInt();100if (actual != expected) {101throw new IllegalStateException("Failure: expected = " + expected + ", actual = " + actual);102}103}104}105}106
107public static class MyObject {108int id;109public MyObject(int id) {110this.id = id;111}112public int id() {113return id;114}115}116}
117