# HG changeset patch # User redestad # Date 1531485406 -7200 # Fri Jul 13 14:36:46 2018 +0200 # Node ID e0f6c88d06169304e3f62c39296510e18fea966e # Parent 147b20e6027424bf819b1a68b2463e7ee43d0a8d 8207235: ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class) throws NPE Reviewed-by: alanb diff --git a/src/java.base/share/classes/java/nio/Bits.java b/src/java.base/share/classes/java/nio/Bits.java --- a/src/java.base/share/classes/java/nio/Bits.java +++ b/src/java.base/share/classes/java/nio/Bits.java @@ -207,43 +207,24 @@ assert cnt >= 0 && reservedMem >= 0 && totalCap >= 0; } - // -- Monitoring of direct buffer usage -- - - static { - // setup access to this package in SharedSecrets - SharedSecrets.setJavaNioAccess( - new JavaNioAccess() { - @Override - public JavaNioAccess.BufferPool getDirectBufferPool() { - return new JavaNioAccess.BufferPool() { - @Override - public String getName() { - return "direct"; - } - @Override - public long getCount() { - return Bits.COUNT.get(); - } - @Override - public long getTotalCapacity() { - return Bits.TOTAL_CAPACITY.get(); - } - @Override - public long getMemoryUsed() { - return Bits.RESERVED_MEMORY.get(); - } - }; - } - @Override - public ByteBuffer newDirectByteBuffer(long addr, int cap, Object ob) { - return new DirectByteBuffer(addr, cap, ob); - } - @Override - public void truncate(Buffer buf) { - buf.truncate(); - } - }); - } + static final JavaNioAccess.BufferPool BUFFER_POOL = new JavaNioAccess.BufferPool() { + @Override + public String getName() { + return "direct"; + } + @Override + public long getCount() { + return Bits.COUNT.get(); + } + @Override + public long getTotalCapacity() { + return Bits.TOTAL_CAPACITY.get(); + } + @Override + public long getMemoryUsed() { + return Bits.RESERVED_MEMORY.get(); + } + }; // These numbers represent the point at which we have empirically // determined that the average cost of a JNI call exceeds the expense diff --git a/src/java.base/share/classes/java/nio/Buffer.java b/src/java.base/share/classes/java/nio/Buffer.java --- a/src/java.base/share/classes/java/nio/Buffer.java +++ b/src/java.base/share/classes/java/nio/Buffer.java @@ -26,6 +26,8 @@ package java.nio; import jdk.internal.HotSpotIntrinsicCandidate; +import jdk.internal.misc.JavaNioAccess; +import jdk.internal.misc.SharedSecrets; import jdk.internal.misc.Unsafe; import java.util.Spliterator; @@ -707,4 +709,23 @@ throw new IndexOutOfBoundsException(); } + static { + // setup access to this package in SharedSecrets + SharedSecrets.setJavaNioAccess( + new JavaNioAccess() { + @Override + public JavaNioAccess.BufferPool getDirectBufferPool() { + return Bits.BUFFER_POOL; + } + @Override + public ByteBuffer newDirectByteBuffer(long addr, int cap, Object ob) { + return new DirectByteBuffer(addr, cap, ob); + } + @Override + public void truncate(Buffer buf) { + buf.truncate(); + } + }); + } + } diff --git a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java --- a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java +++ b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java @@ -194,10 +194,9 @@ public static JavaNioAccess getJavaNioAccess() { if (javaNioAccess == null) { - // Ensure java.nio.ByteOrder is initialized; we know that - // this class initializes java.nio.Bits that provides the + // Ensure java.nio.Buffer is initialized, which provides the // shared secret. - unsafe.ensureClassInitialized(java.nio.ByteOrder.class); + unsafe.ensureClassInitialized(java.nio.Buffer.class); } return javaNioAccess; }