Netty
文章平均质量分 81
程序员路同学
九八年程序员一枚,喜欢钻研技术,从事后端开发,正努力向全栈发展,如果你有更好的技术分享,欢迎私信留言
展开
-
ByteBuffer之HeapByteBuffer与DirectByteBuffer
DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,堆外内存,指的时JVM堆以外的内存,这部分内存并不受JVM管控,也就不能被JVM直接回收了。DirectByteBuffer优点:跟IO设备打交道时会快很多,因为IO设备读取jvm堆里的数据时,不是直接读取的,而是把jvm里的数据读到一个内存块里,再在这个块里读取的,如果使用DirectByteBuffer,则可以省去这一步,实现零拷贝。那怎么办呢,如果有大量的堆外内存回收不了,就会造成内存泄漏。原创 2022-10-09 15:26:42 · 1004 阅读 · 0 评论 -
Netty的零拷贝与ByteBuf
ByteBuf是Netty框架封装的数据缓冲区,区别于ByteBuffer需要有position、limit、flip等属性和操作来控制byteBuffer数据读写,Bytebuf通过两个位置指针来协助缓冲区的读写操作,分别是readIndex和writerIndex。缓冲区有两种模式,分别是写模式和读模式,这两种模式通过使用flip方法进行模式。Netty的零拷贝完全是在用户态(Java 层面)的, 它的零拷贝更多的是偏向于 优化数据操作 这样的概念.而不是操作系统层面的用户态和核心态之间的数据拷贝。原创 2022-10-09 14:33:54 · 691 阅读 · 0 评论 -
数据传输-零拷贝机制
简单来说,用户空间指的就是用户进程的运行空间,内核空间就是内核的运行空间。sendfile是 Linux2.1 内核版本后引入的一个系统调用函数,通过使用sendfile数据可以直接在内核空间进行传输,因此避免了用户空间和内核空间的拷贝,同时由于使用sendfile替代了read+write从而节省了一次系统调用,也就是 2 次上下文切换。mmap的方式节省了一次 CPU 拷贝,同时由于用户进程中的内存是虚拟的,只是映射到内核的读缓冲区,所以可以节省一半的内存空间,比较适合大文件的传输。原创 2022-10-09 14:04:23 · 759 阅读 · 0 评论