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