1、直接緩存算法
這個例子的區別就是緩存
ByteBuffer.allocateDirect(512);函數
進入allocateDirect方法操作系統
進入DirectByteBuffer構造函數blog
Native方法:unsafe.allocateMemory內存
public native long allocateMemory(long var1);垃圾回收
問題:爲何HeapByteBuffer要拷貝數據,而不是由操做系統之間操做這塊數據?構造函數
由於JVM會進行垃圾回收,根據垃圾回收算法,被標記的控件會被回收,而後從新壓縮,以便有更大的連續控件。方法
可是若是操做系統之間操做這塊數據時,發生了GC,那數據就亂了。im
以下圖,標記X的是要回收的內存。