歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 中使用內存映射文件需要考慮的 10 個問題

Java 中使用內存映射文件需要考慮的 10 個問題

日期:2017/3/1 9:51:22   编辑:Linux編程

java中的IO和內存映射文件是什麼?

內存映射文件非常特別,它允許Java程序直接從內存中讀取文件內容,通過將整個或部分文件映射到內存,由操作系統來處理加載請求和寫入文件,應用只需要和內存大交道,這使得IO操作非常快。加載內存映射文件所使用的內存在Java堆區之外。Java編程語言支持內存映射文件,通過java.nio包和MappedByteBuffer 可以從內存直接讀寫文件。

內存映射的優缺點

內存映射IO最大的優點可能在於性能,這對於建立高頻電子交易系統尤其重要。內存映射文件通常比標准通過正常IO訪問文件要快。另一個巨大的優勢是內存映 射IO允許加載不能直接訪問的潛在巨大文件 。經驗表明,內存映射IO在大文件處理方面性能更加優異。盡管它也有不足——增加了頁面錯誤的數目。由於操作系統只將一部分文件加載到內存,如果一個請求 頁面沒有在內存中,它將導致頁面錯誤。同樣它可以被用來在兩個進程中共享數據。

支持內存映射IO的操作系統

大多數主流操作系統比如Windows平台,UNIX,Solaris和其他類UNIX操作系統都支持內存映射IO和64位架構,你幾乎可以將所有文件映射到內存並通過JAVA編程語言直接訪問。

Java的內存映射IO的要點

如下為一些你需要了解的java內存映射要點:

  1. java通過java.nio包來支持內存映射IO。
  2. 內存映射文件主要性能敏感的應用,例如高頻電子交易平台。
  3. 通過使用內存映射IO,你可以將大文件加載到內存。
  4. 內存映射文件可能導致頁面請求錯誤,如果請求頁面不在內存中的話。
  5. 映射文件區域的能力取決於於內存尋址的大小。在32位機器中,你不能訪問超過4GB或2 ^ 32(以上的文件)。
  6. 內存映射IO比起Java中的IO流要快的多。
  7. 加載文件所使用的內存是Java堆區之外,並駐留共享內存,允許兩個不同進程共享文件。
  8. 內存映射文件讀寫由操作系統完成,所以即使在將內存寫入內存後java程序崩潰了,他將仍然會將它寫入文件直到操作系統恢復。
  9. 出於性能考慮,推薦使用直接字節緩沖而不是非直接緩沖。
  10. 不要頻繁調用MappedByteBuffer.force()方法,這個方法意味著強制操作系統將內存中的內容寫入磁盤,所以如果你每次寫入內存映射文件都調用force()方法,你將不會體會到使用映射字節緩沖的好處,相反,它(的性能)將類似於同磁盤IO。
  11. 萬一發生了電源故障或主機故障,將會有很小的機率發生內存映射文件沒有寫入到磁盤,這意味著你可能會丟失關鍵數據。

好吧,小伙伴們,就是這些。內存映射IO是高級程序員特別是對於用Java編寫高性能應用的程序員的一個重要概念。

相關閱讀:

Linux高端內存映射(上) http://www.linuxidc.com/Linux/2012-05/60627.htm
Linux高端內存映射(中) http://www.linuxidc.com/Linux/2012-05/60628.htm
Linux高端內存映射(中) http://www.linuxidc.com/Linux/2012-05/60902.htm

Copyright © Linux教程網 All Rights Reserved