理解java中的mmap

2021-06-05 01:56:47 字數 1333 閱讀 9356

提高io效率, 很多文件中提到這一點,具體大家可以自行測試。

mapmode.read_only:唯讀對映

mapmode.read_write​:讀寫對映

mapmode.private​:copy on write對映,一旦需要改變原有buffer,拷貝乙份原來的

public class mmaptest 

@afterclass

public static void runafterclass() throws ioexception

@before

public void runbeforeeverytest() throws ioexception

/***

* @author weip.pengw

* @time 2012-3-19 下午02:53:21

* @param buffer

* @throws exception

*/public static string dumpbuffer(bytebuffer buffer) throws exception

if (nulls != 0)

} return sb.tostring();

} /**

* * @author weip.pengw

* @throws exception

* @time 2012-3-19 下午02:45:28

*/@test

public void testcopyonwrite() throws exception

重點看看**中的測試方法testcopyonwrite

1)產生乙個較大空洞檔案(本文操過8k),使得作業系統(**在ubuntu10.04測試通過)無法在一頁能對映該檔案(跨記憶體頁),這樣才會有測試效果

mapmode.read_write模式簡稱rw,乙個是

filechannel.mapmode.private模式簡稱cow

3) 測試之前,兩個buff例項內容一致

4)第1步測試修改rw例項,由於沒有觸發copy on write,所以兩個buff例項內容一致

5) 第2步測試修改cow例項的前幾個位元組,cow的修改只影響它本身,因為它修改的時候實際上重新拷貝了乙份

6)第3步測試修改rw例項的後幾個位元組,居然在cow例項中能看到,之前不是說cow拷貝了乙份嗎?原因後面說

7)第4步測試修改cow例項的後幾個位元組,​cow的修改只影響它本身

8)第5步測試修改rw例項的前後位元組,發現都沒反映在cow例項中,的確和6)有所不同。

這說明:

理解java中的mmap

提高io效率,很多文件中提到這一點,具體大家可以自行測試。mapmode.read only 唯讀對映 mapmode.read write 讀寫對映 mapmode.private copy on write對映,一旦需要改變原有buffer,拷貝乙份原來的 public class mmapte...

golang中的mmap使用

mmap的原理參考 下面是乙個簡單的小例子 package main import fmt golang.org x exp mmap func main buff make byte,10 讀入的長度為slice預設的長度,0是offset。缺省長度過長將會用0填充。at.readat buff,...

linux 中mmap的用法

函式 void mmap void start,size t length,int prot,int flags,int fd,off t offsize 引數start 指向 函式 void mmap void start,size t length,int prot,int flags,int ...