java - DirectBuffer的内存由操作系统分配,回收的时候呢?
大家讲道理
大家讲道理 2017-04-18 09:56:21
0
2
286
ByteBuffer writeBuffer = ByteBuffer.allocateDirect(bytes.length);
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
小葫芦

DirectByteBuffer裡有個cleaner,回收的時候就是呼叫這個cleaner的clean()方法的,gc會用這個cleaner來回收的,雖然不是回收到Java的堆裡

分配與回收的實作就是呼叫Unsafe的allocateMemory和freeMemory,裡面其實就是系統呼叫malloc和free

洪涛
  1. 如果是自己需要主動清理的話,需要用一種hack方式.可以參照java在流全部關閉的情況下,刪除硬碟中文件會報錯?我的回答

  2. 如果是系統清理的話,當它發現堆外內存不足以後,會顯示調用System.gc()来清理堆外内存,可以通过添加-XX:+DisableExplicitGC來讓堆外內存溢出

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板