< prev index next >
src/java.management/share/classes/sun/management/ManagementFactoryHelper.java
Print this page
rev 58228 : 8238665: Add JFR event for direct memory statistics
@@ -37,12 +37,13 @@
import javax.management.RuntimeOperationsException;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
-import jdk.internal.access.JavaNioAccess;
import jdk.internal.access.SharedSecrets;
+import jdk.internal.misc.VM;
+import jdk.internal.misc.VM.BufferPool;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.UndeclaredThrowableException;
@@ -50,10 +51,11 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* ManagementFactoryHelper provides static factory methods to create
* instances of the management interface.
*/
@@ -335,31 +337,31 @@
}
static final PlatformLoggingMXBean MBEAN = getInstance();
}
- private static List<BufferPoolMXBean> bufferPools = null;
- public static synchronized List<BufferPoolMXBean> getBufferPoolMXBeans() {
+ private static volatile List<BufferPoolMXBean> bufferPools;
+ public static List<BufferPoolMXBean> getBufferPoolMXBeans() {
if (bufferPools == null) {
- bufferPools = new ArrayList<>(2);
- bufferPools.add(createBufferPoolMXBean(SharedSecrets.getJavaNioAccess()
- .getDirectBufferPool()));
- bufferPools.add(createBufferPoolMXBean(sun.nio.ch.FileChannelImpl
- .getMappedBufferPool()));
- bufferPools.add(createBufferPoolMXBean(sun.nio.ch.FileChannelImpl
- .getSyncMappedBufferPool()));
+ synchronized (ManagementFactoryHelper.class) {
+ if (bufferPools == null) {
+ bufferPools = VM.getBufferPools().stream()
+ .map(ManagementFactoryHelper::createBufferPoolMXBean)
+ .collect(Collectors.toList());
+ }
+ }
}
return bufferPools;
}
private final static String BUFFER_POOL_MXBEAN_NAME = "java.nio:type=BufferPool";
/**
* Creates management interface for the given buffer pool.
*/
private static BufferPoolMXBean
- createBufferPoolMXBean(final JavaNioAccess.BufferPool pool)
+ createBufferPoolMXBean(final BufferPool pool)
{
return new BufferPoolMXBean() {
private volatile ObjectName objname; // created lazily
@Override
public ObjectName getObjectName() {
< prev index next >