android客戶端連接服務端
客戶端使用nio長連接
在服務端主動斷開連接時,出現了不停打印以下類似日誌
03-07 19:21:49.562: D/dalvikvm(1677): GC_CONCURRENT freed 2859K, 20% free 12020K/15011K, paused 1ms+17ms
GC_CONCURRENT 原因 Triggered when the heap has reached a certain amount of objects to collect
在排查之下發現
int nKeys = selector.select(500);
//nKeys = 1
iterator = selector.selectedKeys().iterator();
key = iterator.next();
iterator.remove();
//key.isReadable()=true
ByteBuffer buffer = ByteBuffer.allocate(2048);
SocketChannel sc = (SocketChannel) key.channel();
int ret = sc.read(buffer)
//ret = -1
服務器未主動斷開前,ret沒數據時都返回0
當主動斷開時,ret返回-1,selector.select(500) 會一直返回1.導致了內存問題,促發了gc
因此我在ret返回-1且buffer未讀到任何數據時,來判斷連接已經主動斷開