java,mmap
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java mmap是什麼,讓我們一起了解一下?
mmap是將一個文件或者其它對象映射進內存,文件被映射到多個頁上,如果文件的大小不是所有頁的大小之和,最後一個頁不被使用的空間將會清零。mmap在用戶空間映射調用系統中作用很大。
目前Java提供的mmap只有內存文件映射,其他IO操作還沒有內存映射功能。
Java內存映射文件(Memory Mapped Files)就已經在java.nio包中,但它對很多程序開發者來說仍然是一個相當新的概念。引入NIO後,Java IO已經相當快,而且內存映射文件提供了Java有可能達到的最快IO操作,這也是爲什麼那些高性能Java應用應該使用內存映射文件來持久化數據。
mmap在Java中的用途是什麼?
1、對普通文件使用mmap提供內存映射I/O,以避免系統調用(read、write、lseek)帶來的性能開銷。同時減少了數據在內核緩衝區和進程地址空間的拷貝次數。
2、使用特殊文件提供匿名內存映射。
3、使用shm_open以提供無親緣關係進程間的posix共享內存區。
mmap在Java中是如何使用的?(具體參考kafka源碼中的OffsetIndex這個類)
操作文件,就相當於操作一個ByteBuffer一樣。
public class TestMmap {undefinedpublic static String path = "C:Users64371Desktopmmap";public static void main(String[] args) throws IOException {undefinedFile file1 = new File(path, "1");RandomAccessFile randomAccessFile = new RandomAccessFile(file1, "rw");int len = 2048;// 映射爲2kb,那麼生成的文件也是2kbMappedByteBuffer mmap = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, len);System.out.println(mmap.isReadOnly());System.out.println(mmap.position());System.out.println(mmap.limit());// 寫數據之後,JVM 退出之後會強制刷新的mmap.put("a".getBytes());mmap.put("b".getBytes());mmap.put("c".getBytes());mmap.put("d".getBytes());// System.out.println(mmap.position());// System.out.println(mmap.limit());//// mmap.force();// 參考OffsetIndex強制回收已經分配的mmap,不必等到下次GC,unmap(mmap);// 在Windows上需要執行unmap(mmap); 否則報錯// Windows won't let us modify the file length while the file is mmapped// java.io.IOException: 請求的操作無法在使用用戶映射區域打開的文件上執行randomAccessFile.setLength(len/2);mmap = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, len/2);// A mapping, once established, is not dependent upon the file channel// that was used to create it. Closing the channel, in particular, has no// effect upon the validity of the mapping.randomAccessFile.close();mmap.put(128, "z".getBytes()[0]);}// copy from FileChannelImpl#unmap(私有方法)private static void unmap(MappedByteBuffer bb) {undefinedCleaner cl = ((DirectBuffer)bb).cleaner();if (cl != null)cl.clean();}}
-
手機殼髒了該怎麼清洗
1、硅膠手機殼的清洗方法。先找一個乾的布並放在水裏清洗一下,撈出來之後再擰乾,放在陽臺上曬曬,等曬得差不多了我們就可以用它仔仔細細地把手機殼清洗一次。如果發現你的手機殼上有污點的話,或者是灰塵,都可以用小牙刷沾上一點牙膏來清洗。如果你的手機殼上有膠水...
-
微信怎麼建
1、微信的創建方法:打開微信。點擊更多。選擇註冊。輸入暱稱,手機號和密碼。勾選同意協議。點擊註冊即可。2、微信推薦使用手機號註冊,並支持100餘個國家的手機號。微信不可以通過QQ號直接登錄註冊或者通過郵箱帳號註冊。第一次使用QQ號登陸時,是登陸不了的,只能用...
-
qq微視怎麼看自己的瀏覽記錄
在我們日常生活中刷微視時可能會刷到一些有趣的片段,如果過了幾天後還想看的話,可以去查看一下自己的瀏覽記錄,下面就來教大家如何查看微視的瀏覽記錄。其實目前來說,在微視裏有兩種方法可以查看自己的瀏覽記錄,一種是在手機上下載安裝微視後,進入個人頁面,通過個人頁...
-
電腦被限速的解決方法
1、安裝打開QQ管家主面板,點擊右下角的‘工具箱’。2、需要使用到的軟件有ARP防火牆,在安裝上網右過點擊下載,下載完成後會提示是否安裝的。3、下載完成後提示是否安裝,安裝的過程中有可能會段網,在需要使用到網絡的時候不要安裝。4、安裝完成,ARP防火牆已經啓用,如果...