java nio中,HeapByteBuffer与DirectByteBuffer的区别
2017-08-15 16:18
661 查看
HeapByteBuffer,顾名思义,是写在jvm堆上面的一个buffer,底层的本质是一个数组,用类封装维护了很多的索引(limit/position/capacity等)
DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据
HeapByteBuffer优点:由于内容维护在jvm里,所以把内容写进buffer里速度会快些;并且,可以更容易回收
DirectByteBuffer优点:跟外设(IO设备)打交道时会快很多,因为外设读取jvm堆里的数据时,不是直接读取的,而是把jvm里的数据读到一个内存块里,再在这个块里读取的,如果使用DirectByteBuffer,则可以省去这一步,实现zero copy(零拷贝)
题外:外设之所以要把jvm堆里的数据copy出来再操作,不是因为操作系统不能直接操作jvm内存,而是因为jvm在进行gc(垃圾回收)时,会对数据进行移动,一旦出现这种问题,外设就会出现数据错乱的情况
DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据
HeapByteBuffer优点:由于内容维护在jvm里,所以把内容写进buffer里速度会快些;并且,可以更容易回收
DirectByteBuffer优点:跟外设(IO设备)打交道时会快很多,因为外设读取jvm堆里的数据时,不是直接读取的,而是把jvm里的数据读到一个内存块里,再在这个块里读取的,如果使用DirectByteBuffer,则可以省去这一步,实现zero copy(零拷贝)
题外:外设之所以要把jvm堆里的数据copy出来再操作,不是因为操作系统不能直接操作jvm内存,而是因为jvm在进行gc(垃圾回收)时,会对数据进行移动,一旦出现这种问题,外设就会出现数据错乱的情况
相关文章推荐
- java nio中,HeapByteBuffer与DirectByteBuffer的区别
- java之HeapByteBuffer&DirectByteBuffer以及回收DirectByteBuffer
- java.nio.ByteBuffer 以及flip,clear及rewind区别
- 笔记:Java NIO heap buffer和direct buffer
- java java.nio.ByteBuffer.allocateDirect 导致内存泄露
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- Java_JVM参数-XX:MaxDirectMemorySize 与 两种 ByteBuffer: heap,direct ByteBuffer
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- Java_JVM参数-XX:MaxDirectMemorySize 与 两种 ByteBuffer: heap,direct ByteBuffer
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer 以及flip,clear及rewind区别
- java.nio.ByteBuffer 以及flip,clear及rewind区别
- 【Java8源码分析】NIO包-Buffer类:ByteBuffer与HeapByteBuffer(一)
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java之HeapByteBuffer&DirectByteBuffer以及回收DirectByteBuffer