提交 fbe518a5 编写于 作者: A alanb

6999915: TEST_BUG: test/java/nio/channels/AsynchronousSocketChannel/Leaky.java...

6999915: TEST_BUG: test/java/nio/channels/AsynchronousSocketChannel/Leaky.java failed intermittently (win)
Reviewed-by: forax
上级 24acdd3f
...@@ -22,15 +22,19 @@ ...@@ -22,15 +22,19 @@
*/ */
/* @test /* @test
* @bug 4607272 * @bug 4607272 6999915
* @summary Unit test for AsynchronousSocketChannel * @summary Unit test for AsynchronousSocketChannel
* @run main/othervm -XX:+DisableExplicitGC -mx64m Leaky * @run main/othervm -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=64m Leaky
*/ */
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.BufferPoolMXBean;
import java.nio.channels.*; import java.nio.channels.*;
import java.net.*; import java.net.*;
import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.lang.management.ManagementFactory;
/** /**
* Heap buffers must be substituted with direct buffers when doing I/O. This * Heap buffers must be substituted with direct buffers when doing I/O. This
...@@ -49,13 +53,13 @@ public class Leaky { ...@@ -49,13 +53,13 @@ public class Leaky {
private final ByteBuffer dst; private final ByteBuffer dst;
private Future<Integer> readResult; private Future<Integer> readResult;
Connection() throws Exception { Connection(AsynchronousChannelGroup group) throws Exception {
ServerSocketChannel ssc = ServerSocketChannel ssc =
ServerSocketChannel.open().bind(new InetSocketAddress(0)); ServerSocketChannel.open().bind(new InetSocketAddress(0));
InetAddress lh = InetAddress.getLocalHost(); InetAddress lh = InetAddress.getLocalHost();
int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort(); int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort();
SocketAddress remote = new InetSocketAddress(lh, port); SocketAddress remote = new InetSocketAddress(lh, port);
client = AsynchronousSocketChannel.open(); client = AsynchronousSocketChannel.open(group);
client.connect(remote).get(); client.connect(remote).get();
peer = ssc.accept(); peer = ssc.accept();
ssc.close(); ssc.close();
...@@ -77,11 +81,21 @@ public class Leaky { ...@@ -77,11 +81,21 @@ public class Leaky {
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
ThreadFactory threadFactory = new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
};
AsynchronousChannelGroup group =
AsynchronousChannelGroup.withFixedThreadPool(4, threadFactory);
final int CONNECTION_COUNT = 10; final int CONNECTION_COUNT = 10;
Connection[] connections = new Connection[CONNECTION_COUNT]; Connection[] connections = new Connection[CONNECTION_COUNT];
for (int i=0; i<CONNECTION_COUNT; i++) { for (int i=0; i<CONNECTION_COUNT; i++) {
connections[i] = new Connection(); connections[i] = new Connection(group);
} }
for (int i=0; i<1024; i++) { for (int i=0; i<1024; i++) {
...@@ -100,5 +114,20 @@ public class Leaky { ...@@ -100,5 +114,20 @@ public class Leaky {
conn.finishRead(); conn.finishRead();
} }
} }
// print summary of buffer pool usage
List<BufferPoolMXBean> pools =
ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
for (BufferPoolMXBean pool: pools)
System.out.format(" %8s ", pool.getName());
System.out.println();
for (int i=0; i<pools.size(); i++)
System.out.format("%6s %10s %10s ", "Count", "Capacity", "Memory");
System.out.println();
for (BufferPoolMXBean pool: pools) {
System.out.format("%6d %10d %10d ",
pool.getCount(), pool.getTotalCapacity(), pool.getMemoryUsed());
}
System.out.println();
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册