Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/test/gc/shenandoah/jvmti/TestHeapDump.java
32285 views
1
/*
2
* Copyright (c) 2019, 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
public class TestHeapDump {
25
26
private static final int NUM_ITER = 10000;
27
28
private static final int ARRAY_SIZE = 1000;
29
30
private static final int EXPECTED_OBJECTS =
31
ARRAY_SIZE + // array reachable from instance field
32
1 + // static field root
33
1; // local field root
34
35
static {
36
try {
37
System.loadLibrary("TestHeapDump");
38
} catch (UnsatisfiedLinkError ule) {
39
System.err.println("Could not load TestHeapDump library");
40
System.err.println("java.library.path: "
41
+ System.getProperty("java.library.path"));
42
throw ule;
43
}
44
}
45
46
native static int heapdump(Class<?> filterClass);
47
48
public static void main(String args[]) {
49
new TestHeapDump().run();
50
}
51
52
// This root needs to be discovered
53
static Object root = new TestObject();
54
55
// This field needs to be discovered
56
TestObject[] array;
57
58
public void run() {
59
array = new TestObject[ARRAY_SIZE];
60
for (int i = 0; i < ARRAY_SIZE; i++) {
61
array[i] = new TestObject();
62
}
63
TestObject localRoot = new TestObject();
64
for (int i = 0; i < NUM_ITER; i++) {
65
int numObjs = heapdump(TestObject.class);
66
if (numObjs != EXPECTED_OBJECTS) {
67
throw new RuntimeException("Expected " + EXPECTED_OBJECTS + " objects, but got " + numObjs);
68
}
69
}
70
reachabilityFence(array);
71
reachabilityFence(localRoot);
72
}
73
74
// We look for the instances of this class during the heap scan
75
public static class TestObject {}
76
77
// See Reference.reachabilityFence() implementation in later
78
// JDKs.
79
static void reachabilityFence(Object obj) {}
80
}
81
82