![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RocketMQ问答
文章平均质量分 92
以问答形似深入理解消息队列原理
翁正存
做一名合格的工程师
展开
-
TransientStorePool堆外缓存池技术
RocketMQ的TransientStorePool设计主要通过内存池和MMAP技术将消息先写入内存池中的内存块,然后将内存块的数据刷入MMAP内存,最后再将MMAP内存的数据刷入磁盘。它通过预分配内存块,将消息写入预分配的内存块(直接内存),然后使用内存映射文件(Memory-Mapped File)将内存块中的数据刷到磁盘,从而提高写入性能。当文件被映射到内存地址空间时,文件的读写操作实际上是在内存中进行的,这部分内存位于堆外,不受 Java 垃圾回收(GC)机制的影响。原创 2023-06-16 11:43:41 · 1573 阅读 · 0 评论 -
RocketMQ MappedFile设计思路
然而,内存映射文件也有一定的局限性,如地址空间的大小受到操作系统的限制,因此对于非常大的文件可能无法完整映射到内存中。需要注意的是,在选择回收的物理内存页时,操作系统会考虑这个页的使用情况,如是否被修改(脏页)。虚拟内存管理是操作系统中的一种内存管理技术,它允许程序拥有独立的、连续的地址空间,并将这些地址空间映射到物理内存和磁盘上的存储资源。避免了额外的内存拷贝:当我们从磁盘文件读取数据时,如果不使用内存映射文件,数据需要先从磁盘读取到操作系统的缓冲区,然后再从缓冲区拷贝到Java堆内存中。原创 2023-06-15 12:27:40 · 1106 阅读 · 0 评论