Java NIO 堆外内存与零拷贝

1、直接缓存算法

这个例子的区别就是缓存

 ByteBuffer.allocateDirect(512);函数

 

进入allocateDirect方法操作系统

 

进入DirectByteBuffer构造函数blog

Native方法:unsafe.allocateMemory内存

public native long allocateMemory(long var1);垃圾回收

 

 

问题:为何HeapByteBuffer要拷贝数据,而不是由操做系统之间操做这块数据?构造函数

由于JVM会进行垃圾回收,根据垃圾回收算法,被标记的控件会被回收,而后从新压缩,以便有更大的连续控件。方法

可是若是操做系统之间操做这块数据时,发生了GC,那数据就乱了。im

以下图,标记X的是要回收的内存。

相关文章
相关标签/搜索