一、直接缓存
这个例子的区别就是
ByteBuffer.allocateDirect(512);
进入allocateDirect方法
进入DirectByteBuffer构造函数
Native方法:unsafe.allocateMemory
public native long allocateMemory(long var1);
问题:为什么HeapByteBuffer要拷贝数据,而不是由操作系统之间操作这块数据?
因为JVM会进行垃圾回收,根据垃圾回收算法,被标记的控件会被回收,然后重新压缩,以便有更大的连续控件。
但是如果操作系统之间操作这块数据时,发生了GC,那数据就乱了。
如下图,标记X的是要回收的内存。
声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件1139811139@qq.com与我们联系处理。敬请谅解!