H5W3
当前位置:H5W3 > 其他技术问题 > 正文

DirectBuffer的内存由操作系统分配,回收的时候呢?

ByteBuffer writeBuffer = ByteBuffer.allocateDirect(bytes.length);

回答:

DirectByteBuffer里有个cleaner,回收的时候就是调用这个cleaner的clean()方法的,gc会用这个cleaner来回收的,虽然不是回收到Java的堆里

分配和回收的实现就是调用Unsafe的allocateMemory和freeMemory,里面其实就是系统调用malloc和free

回答:

  1. 如果是自己需要主动清理的话,需要用一种hack方式.可以参照java在流全部关闭的情况下,删除硬盘中文件会报错?我的回答

  2. 如果是系统清理的话,当它发现堆外内存不足以后,会显示调用System.gc()来清理堆外内存,可以通过添加-XX:+DisableExplicitGC来让堆外内存溢出

本文地址:H5W3 » DirectBuffer的内存由操作系统分配,回收的时候呢?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址