1、直接缓存算法
这个例子的区别就是缓存
ByteBuffer.allocateDirect(512);函数
进入allocateDirect方法操作系统
进入DirectByteBuffer构造函数blog
Native方法:unsafe.allocateMemory内存
public native long allocateMemory(long var1);垃圾回收
问题:为何HeapByteBuffer要拷贝数据,而不是由操做系统之间操做这块数据?构造函数
由于JVM会进行垃圾回收,根据垃圾回收算法,被标记的控件会被回收,而后从新压缩,以便有更大的连续控件。方法
可是若是操做系统之间操做这块数据时,发生了GC,那数据就乱了。im
以下图,标记X的是要回收的内存。