首先我怎么確定不是我的業(yè)務(wù)代碼問題:
就是我的業(yè)務(wù)代碼里,沒有做任何對這個connection對象的引用。為了確認100%沒有做引用,我特意為某個連接做了特殊處理,就是基本上沒有業(yè)務(wù)代碼。
什么情況下無法被釋放:我做的是HTTP服務(wù),就是在客戶端瀏覽器連接上服務(wù)器,但是還沒有收到響應(yīng),就主動的關(guān)閉了連接的情況下。
這時候服務(wù)端的這個connection對象,就無法被正常釋放回收。
我專門研究了,onClose事件會觸發(fā),destroy方法也會被執(zhí)行,但是destruct方法無法被觸發(fā)。
我打印了一下堆棧。大概是:
baseRead方法里面有一個代碼發(fā)現(xiàn)到客戶端的連接已經(jīng)關(guān)閉,然后就主動的執(zhí)行了destroy方法,似乎是試圖關(guān)閉連接。但是結(jié)果是這個連接不能被正常釋放。