如何从RocketMQ深入探讨零拷贝在JVM层的具体实现原理?

2026-05-27 16:540阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2254个文字,预计阅读时间需要10分钟。

如何从RocketMQ深入探讨零拷贝在JVM层的具体实现原理?

在上文中,主要介绍了RocketMQ消息的存储流程。主要应用了mmap的零拷贝技术,实现了硬盘和内存的映射,从而提升了读写性能。流程中包含一个非同寻常的预热方法,但未详细说明。

在上一篇文章中,主要介绍了rocketmq消息的存储流程。其主要使用了mmap的零拷贝技术实现了硬盘和内存的映射,从而提高了读写性能。在流程中有一个非常有意思的预热方法并没有详细分析,因为其中涉及到了一些系统方法的调用。而本文就从该方法入手,进而分享除了mmap之外,还有哪些零拷贝方法,以及他们的系统底层调用是怎样的。
本文的主要内容
1.page cache与mmap的关系
2.rocketmq对零拷贝的使用和优化
3.transferTo/From的零拷贝
4.splice的零拷贝

1.page cache与mmap的关系

page cache允许系统将一部分硬盘上的数据存放在内存中,使得对这部分数据的访问不需要再读取硬盘了,从而提高了读写性能。我理解这就是所谓的内核缓存。page cache以页为单位,一般一页为4kb。当程序需要将数据写入文件时,并不会,也不能直接将数据写到磁盘上,而是先将数据复制到page cache中,并标记为dirty,等待系统的flusher线程定时将这部分数据落到硬盘上。
对于用户程序来说,因为不能直接访问内核缓存,所以读取文件数据都必须等待系统将数据从磁盘上复制到page cache中,再从page cache复制一份到用户态的内存中。于是读取文件就产生了2次数据的复制:硬盘=>page cache,page cache=>用户态内存。同样的数据在内存中会存在2份,这既占用了不必要的内存空间,也产生了冗余的拷贝。

阅读全文
标签:JVM

本文共计2254个文字,预计阅读时间需要10分钟。

如何从RocketMQ深入探讨零拷贝在JVM层的具体实现原理?

在上文中,主要介绍了RocketMQ消息的存储流程。主要应用了mmap的零拷贝技术,实现了硬盘和内存的映射,从而提升了读写性能。流程中包含一个非同寻常的预热方法,但未详细说明。

在上一篇文章中,主要介绍了rocketmq消息的存储流程。其主要使用了mmap的零拷贝技术实现了硬盘和内存的映射,从而提高了读写性能。在流程中有一个非常有意思的预热方法并没有详细分析,因为其中涉及到了一些系统方法的调用。而本文就从该方法入手,进而分享除了mmap之外,还有哪些零拷贝方法,以及他们的系统底层调用是怎样的。
本文的主要内容
1.page cache与mmap的关系
2.rocketmq对零拷贝的使用和优化
3.transferTo/From的零拷贝
4.splice的零拷贝

1.page cache与mmap的关系

page cache允许系统将一部分硬盘上的数据存放在内存中,使得对这部分数据的访问不需要再读取硬盘了,从而提高了读写性能。我理解这就是所谓的内核缓存。page cache以页为单位,一般一页为4kb。当程序需要将数据写入文件时,并不会,也不能直接将数据写到磁盘上,而是先将数据复制到page cache中,并标记为dirty,等待系统的flusher线程定时将这部分数据落到硬盘上。
对于用户程序来说,因为不能直接访问内核缓存,所以读取文件数据都必须等待系统将数据从磁盘上复制到page cache中,再从page cache复制一份到用户态的内存中。于是读取文件就产生了2次数据的复制:硬盘=>page cache,page cache=>用户态内存。同样的数据在内存中会存在2份,这既占用了不必要的内存空间,也产生了冗余的拷贝。

阅读全文
标签:JVM