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