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
DirectByteBuffer裡有個cleaner,回收的時候就是呼叫這個cleaner的clean()方法的,gc會用這個cleaner來回收的,雖然不是回收到Java的堆裡
分配與回收的實作就是呼叫Unsafe的allocateMemory和freeMemory,裡面其實就是系統呼叫malloc和free
如果是自己需要主動清理的話,需要用一種
hack
方式.可以參照java在流全部關閉的情況下,刪除硬碟中文件會報錯?我的回答如果是系統清理的話,當它發現堆外內存不足以後,會顯示調用
System.gc()
来清理堆外内存,可以通过添加-XX:+DisableExplicitGC
來讓堆外內存溢出