top

使用Java memory mapped file來作為IPC的橋樑

在上一篇的文章我們驗證了Java MappedByteBuffer (透過MemoryMapped file來映射)的讀寫的throughput是非常的好, 所以延續這一篇我們就利用它來做為不同Java processes (也就是不同的JVM)如何利用它來共同分享資料。

Memory Mapped File的WIKI


所謂的memory-mapped file可視為一種虛擬記憶體 (Virtual Memory)的區段 (Segment) 映射,通常都是映射至硬碟或是SSD的非揮發性的記憶裝置上。一但映射好了之後, 就可以如同一般記憶體般地來使用。

好處在於使用這種技術可以提高I/O的效率尤其是對於比較大的檔案,至於對於小檔案來說可能就不是那麼地適合。為啥? 因為作業系統的paging size大約是4 K bytes, 如果我們只映射了5 K bytes的話¸ 那麼就有3 K bytes的paging的空間是浪費了。另外一個好處就是對於一個Size很大的檔案 (比記憶體大), 我們可以使用一小塊記憶體就可以把它映射進來處理。

當然這世上是沒有白吃的午餐的, 使用memory-mapped file有可能會因為page fault (當一段資料被載入到page cache中但是映射到virtual memory的過程還沒完成)而導致速度比正常I/O還差 (還好這種機率不高---擦汗!!!!)

另外要小心的是, 在32位元的作業系統中也不適合使用, 因為32位元的記憶體定址空間有限(大約是4GiB)。

更多內容,請參考原始Blog網址: http://erhwenkuo.blogspot.tw/201 ... -fileipc-inter.html