Java NIO 堆外內存與零拷貝

1、直接緩存算法

這個例子的區別就是緩存

 ByteBuffer.allocateDirect(512);函數

 

進入allocateDirect方法操作系統

 

進入DirectByteBuffer構造函數blog

Native方法:unsafe.allocateMemory內存

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

 

 

問題:爲何HeapByteBuffer要拷貝數據,而不是由操做系統之間操做這塊數據?構造函數

由於JVM會進行垃圾回收,根據垃圾回收算法,被標記的控件會被回收,而後從新壓縮,以便有更大的連續控件。方法

可是若是操做系統之間操做這塊數據時,發生了GC,那數據就亂了。im

以下圖,標記X的是要回收的內存。

相關文章
相關標籤/搜索