扫码关注官方订阅号
ByteBuffer writeBuffer = ByteBuffer.allocateDirect(bytes.length);
光阴似箭催人老,日月如移越少年。
DirectByteBuffer里有个cleaner,回收的时候就是调用这个cleaner的clean()方法的,gc会用这个cleaner来回收的,虽然不是回收到Java的堆里
分配和回收的实现就是调用Unsafe的allocateMemory和freeMemory,里面其实就是系统调用malloc和free
如果是自己需要主动清理的话,需要用一种hack方式.可以参照java在流全部关闭的情况下,删除硬盘中文件会报错?我的回答
hack
如果是系统清理的话,当它发现堆外内存不足以后,会显示调用System.gc()来清理堆外内存,可以通过添加-XX:+DisableExplicitGC来让堆外内存溢出
System.gc()
-XX:+DisableExplicitGC
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
DirectByteBuffer里有个cleaner,回收的时候就是调用这个cleaner的clean()方法的,gc会用这个cleaner来回收的,虽然不是回收到Java的堆里
分配和回收的实现就是调用Unsafe的allocateMemory和freeMemory,里面其实就是系统调用malloc和free
如果是自己需要主动清理的话,需要用一种
hack方式.可以参照java在流全部关闭的情况下,删除硬盘中文件会报错?我的回答如果是系统清理的话,当它发现堆外内存不足以后,会显示调用
System.gc()来清理堆外内存,可以通过添加-XX:+DisableExplicitGC来让堆外内存溢出