Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/gc/shenandoah/jni/TestJNIGlobalRefs.java
41153 views
1
/*
2
* Copyright (c) 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
*/
24
25
/* @test TestJNIGlobalRefs
26
* @summary Test JNI Global Refs with Shenandoah
27
* @requires vm.gc.Shenandoah
28
*
29
* @run main/othervm/native -Xmx1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
30
* -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
31
* -XX:+ShenandoahVerify
32
* TestJNIGlobalRefs
33
*/
34
35
/* @test TestJNIGlobalRefs
36
* @summary Test JNI Global Refs with Shenandoah
37
* @requires vm.gc.Shenandoah
38
*
39
* @run main/othervm/native -Xmx1g -Xlog:gc -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
40
* -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive
41
* TestJNIGlobalRefs
42
*/
43
44
import java.util.Arrays;
45
import java.util.Random;
46
47
public class TestJNIGlobalRefs {
48
static {
49
System.loadLibrary("TestJNIGlobalRefs");
50
}
51
52
private static final int TIME_MSEC = 120000;
53
private static final int ARRAY_SIZE = 10000;
54
55
private static native void makeGlobalRef(Object o);
56
private static native void makeWeakGlobalRef(Object o);
57
private static native Object readGlobalRef();
58
private static native Object readWeakGlobalRef();
59
60
public static void main(String[] args) throws Throwable {
61
seedGlobalRef();
62
seedWeakGlobalRef();
63
long start = System.currentTimeMillis();
64
long current = start;
65
while (current - start < TIME_MSEC) {
66
testGlobal();
67
testWeakGlobal();
68
Thread.sleep(1);
69
current = System.currentTimeMillis();
70
}
71
}
72
73
private static void seedGlobalRef() {
74
int[] a = new int[ARRAY_SIZE];
75
fillArray(a, 1337);
76
makeGlobalRef(a);
77
}
78
79
private static void seedWeakGlobalRef() {
80
int[] a = new int[ARRAY_SIZE];
81
fillArray(a, 8080);
82
makeWeakGlobalRef(a);
83
}
84
85
private static void testGlobal() {
86
int[] a = (int[]) readGlobalRef();
87
checkArray(a, 1337);
88
}
89
90
private static void testWeakGlobal() {
91
int[] a = (int[]) readWeakGlobalRef();
92
if (a != null) {
93
checkArray(a, 8080);
94
} else {
95
// weak reference is cleaned, recreate:
96
seedWeakGlobalRef();
97
}
98
}
99
100
private static void fillArray(int[] array, int seed) {
101
Random r = new Random(seed);
102
for (int i = 0; i < ARRAY_SIZE; i++) {
103
array[i] = r.nextInt();
104
}
105
}
106
107
private static void checkArray(int[] array, int seed) {
108
Random r = new Random(seed);
109
if (array.length != ARRAY_SIZE) {
110
throw new IllegalStateException("Illegal array length: " + array.length + ", but expected " + ARRAY_SIZE);
111
}
112
for (int i = 0; i < ARRAY_SIZE; i++) {
113
int actual = array[i];
114
int expected = r.nextInt();
115
if (actual != expected) {
116
throw new IllegalStateException("Incorrect array data: " + actual + ", but expected " + expected);
117
}
118
}
119
}
120
}
121
122