GC_CONCURRENT freed 循環不停打印日誌

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未讀到任何數據時,來判斷連接已經主動斷開



發佈了29 篇原創文章 · 獲贊 19 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章