test/java/lang/management/BufferPoolMXBean/Basic.java

Print this page

        

*** 20,43 **** * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! * @bug 6606598 ! * @summary Unit test for java.nio.BufferPoolMXBean * @run main/othervm Basic */ import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; ! import java.nio.BufferPoolMXBean; import java.nio.channels.FileChannel; ! import java.io.File; ! import java.io.RandomAccessFile; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; import java.util.*; public class Basic { // static fields to ensure buffers aren't GC'ed --- 20,45 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! * @bug 6606598 7024172 ! * @summary Unit test for java.lang.management.BufferPoolMXBean * @run main/othervm Basic */ import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; ! import java.nio.file.Path; ! import java.nio.file.Files; ! import static java.nio.file.StandardOpenOption.*; import java.nio.channels.FileChannel; ! import java.lang.management.BufferPoolMXBean; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; + import java.lang.ref.WeakReference; import java.util.*; public class Basic { // static fields to ensure buffers aren't GC'ed
*** 76,100 **** int cap = 1024 + rand.nextInt(4096); buffers.add( ByteBuffer.allocateDirect(cap) ); totalCapacity += cap; } ! // map a file ! File f = File.createTempFile("blah", null); ! f.deleteOnExit(); ! RandomAccessFile raf = new RandomAccessFile(f, "rw"); ! FileChannel fc = raf.getChannel(); mbb = fc.map(FileChannel.MapMode.READ_WRITE, 10, 100); bufferCount++; totalCapacity += mbb.capacity(); ! // direct List<BufferPoolMXBean> pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class); check(pools, bufferCount, totalCapacity); ! // using MBeanServer MBeanServer server = ManagementFactory.getPlatformMBeanServer(); Set<ObjectName> mbeans = server.queryNames( new ObjectName("java.nio:type=BufferPool,*"), null); pools = new ArrayList<BufferPoolMXBean>(); for (ObjectName name: mbeans) { --- 78,102 ---- int cap = 1024 + rand.nextInt(4096); buffers.add( ByteBuffer.allocateDirect(cap) ); totalCapacity += cap; } ! // create a mapped buffer ! Path tmpfile = Files.createTempFile("blah", null); ! tmpfile.toFile().deleteOnExit(); ! try (FileChannel fc = FileChannel.open(tmpfile, READ, WRITE)) { mbb = fc.map(FileChannel.MapMode.READ_WRITE, 10, 100); bufferCount++; totalCapacity += mbb.capacity(); + } ! // use platform MXBeans directly List<BufferPoolMXBean> pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class); check(pools, bufferCount, totalCapacity); ! // use MBeanServer MBeanServer server = ManagementFactory.getPlatformMBeanServer(); Set<ObjectName> mbeans = server.queryNames( new ObjectName("java.nio:type=BufferPool,*"), null); pools = new ArrayList<BufferPoolMXBean>(); for (ObjectName name: mbeans) {
*** 101,107 **** --- 103,117 ---- BufferPoolMXBean pool = ManagementFactory .newPlatformMXBeanProxy(server, name.toString(), BufferPoolMXBean.class); pools.add(pool); } check(pools, bufferCount, totalCapacity); + + // attempt to unmap mapped buffer + WeakReference<MappedByteBuffer> ref = new WeakReference<>(mbb); + mbb = null; + do { + System.gc(); + Thread.sleep(250); + } while (ref.get() != null); } }