- 直接内存是由Unsafe类负责分配和释放的,并不由垃圾回收管理
- 垃圾回收Gc只能管理Java内存,不能管理系统内存
import java.nio.ByteBuffer;
public class DirectoryMemoryTest {
static int _1Gb=1024*1024*1024;
public static void main(String[] args) {
ByteBuffer bytebuffer = ByteBuffer.allocateDirect(_1Gb);
//实际调用的Unsafe类进行内存分配:base = UNSAFE.allocateMemory(size);
System.out.println("分配完成");
System.out.println("开始释放");
bytebuffer=null;
/*使用Cleaner监测ByteBuffer对象,一旦其被垃圾回收,就会触发直接内存的释放
cleaner = Cleaner.create(this, new Deallocator(base, size, cap));
this即为关联的Byteuffer对象
当该对象被释放时,就会由守护线程ReferenHandler通过CleanerB的clean方法释放内存,内部实际调用的为:
UNSAFE.freeMemory(address);
* */
}
}