Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/lang/management/BufferPoolMXBean/Basic.java
38828 views
1
/*
2
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. 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
/* @test
25
* @bug 6606598 7024172
26
* @summary Unit test for java.lang.management.BufferPoolMXBean
27
* @run main/othervm Basic
28
* @key randomness
29
*/
30
31
import java.nio.ByteBuffer;
32
import java.nio.MappedByteBuffer;
33
import java.nio.file.Path;
34
import java.nio.file.Files;
35
import static java.nio.file.StandardOpenOption.*;
36
import java.nio.channels.FileChannel;
37
import java.lang.management.BufferPoolMXBean;
38
import java.lang.management.ManagementFactory;
39
import javax.management.MBeanServer;
40
import javax.management.ObjectName;
41
import java.lang.ref.WeakReference;
42
import java.util.*;
43
44
public class Basic {
45
46
// static fields to ensure buffers aren't GC'ed
47
static List<ByteBuffer> buffers;
48
static MappedByteBuffer mbb;
49
50
// check counters
51
static void check(List<BufferPoolMXBean> pools,
52
int minBufferCount,
53
long minTotalCapacity)
54
{
55
int bufferCount = 0;
56
long totalCap = 0;
57
long totalMem = 0;
58
for (BufferPoolMXBean pool: pools) {
59
bufferCount += pool.getCount();
60
totalCap += pool.getTotalCapacity();
61
totalMem += pool.getMemoryUsed();
62
}
63
if (bufferCount < minBufferCount)
64
throw new RuntimeException("Count less than expected");
65
if (totalMem < minTotalCapacity)
66
throw new RuntimeException("Memory usage less than expected");
67
if (totalCap < minTotalCapacity)
68
throw new RuntimeException("Total capacity less than expected");
69
}
70
71
public static void main(String[] args) throws Exception {
72
Random rand = new Random();
73
74
// allocate a few direct buffers
75
int bufferCount = 5 + rand.nextInt(20);
76
buffers = new ArrayList<ByteBuffer>(bufferCount);
77
long totalCapacity = 0L;
78
for (int i=0; i<bufferCount; i++) {
79
int cap = 1024 + rand.nextInt(4096);
80
buffers.add( ByteBuffer.allocateDirect(cap) );
81
totalCapacity += cap;
82
}
83
84
// create a mapped buffer
85
Path tmpfile = Files.createTempFile("blah", null);
86
tmpfile.toFile().deleteOnExit();
87
try (FileChannel fc = FileChannel.open(tmpfile, READ, WRITE)) {
88
mbb = fc.map(FileChannel.MapMode.READ_WRITE, 10, 100);
89
bufferCount++;
90
totalCapacity += mbb.capacity();
91
}
92
93
// use platform MXBeans directly
94
List<BufferPoolMXBean> pools =
95
ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
96
check(pools, bufferCount, totalCapacity);
97
98
// use MBeanServer
99
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
100
Set<ObjectName> mbeans = server.queryNames(
101
new ObjectName("java.nio:type=BufferPool,*"), null);
102
pools = new ArrayList<BufferPoolMXBean>();
103
for (ObjectName name: mbeans) {
104
BufferPoolMXBean pool = ManagementFactory
105
.newPlatformMXBeanProxy(server, name.toString(), BufferPoolMXBean.class);
106
pools.add(pool);
107
}
108
check(pools, bufferCount, totalCapacity);
109
110
// attempt to unmap mapped buffer
111
WeakReference<MappedByteBuffer> ref = new WeakReference<>(mbb);
112
mbb = null;
113
do {
114
System.gc();
115
Thread.sleep(250);
116
} while (ref.get() != null);
117
}
118
}
119
120