http://edisonlz.iteye.com/blog/1197453
http://blog.yufeng.info/archives/2456
主要是了解mac下vmmap命令配合使用情況,mmap內存映射對應java nio的RandomaccessFile的FileChannel進行map()操作。
public class RandomMapFileReadTest { static int length = 0x8000000; // 128 Mb public static void main(String[] args) throws FileNotFoundException { try{ // 為了以可讀可寫的方式打開文件,這里使用RandomAccessFile來創建文件。 FileChannel fc = new RandomAccessFile("test.dat", "rw").getChannel(); //注意,文件通道的可讀可寫要建立在文件流本身可讀寫的基礎之上 MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, length); //寫128M的內容 byte[] readArray = new byte[1024]; for (int i = 0; i < length; i++) { byte byteChar = out.get(); readArray[i%1024] = byteChar; if(i == length/2) { Thread.sleep(20); System.out.一個已經存在的128M文件,在map后,通過for循環不斷讀入內存,可以通過vmmap -resident <pid>命令看出,map的resident內存是一步一步讀入的:
yangyamin:~ yangyamin$ vmmap -resident 1486 | grep testmapped file 0000000115a8d000-000000011da8d000 [128.0M 56.9M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.datyangyamin:~ yangyamin$ vmmap -resident 1486 | grep testmapped file 0000000115a8d000-000000011da8d000 [128.0M 89.7M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.datyangyamin:~ yangyamin$ vmmap -resident 1486 | grep test/mapped file 0000000115a8d000-000000011da8d000 [128.0M 107.5M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.datyangyamin:~ yangyamin$ vmmap -resident 1486 | grep testmapped file 0000000115a8d000-000000011da8d000 [128.0M 125.9M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.datyangyamin:~ yangyamin$ vmmap -resident 1486 | grep testmapped file 0000000115a8d000-000000011da8d000 [128.0M 128.0M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.datyangyamin:~ yangyamin$ vmmap -resident 1486 | grep testmapped file 0000000115a8d000-000000011da8d000 [128.0M 128.0M] rw-/rwx SM=PRV /Users/yangyamin/data/spv/test.dat新聞熱點
疑難解答