日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

内存映射文件 写入 卡住_在Java中使用内存映射文件时检测(写入)失败

發布時間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存映射文件 写入 卡住_在Java中使用内存映射文件时检测(写入)失败 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內存映射文件 寫入 卡住

內存映射文件是一個很好的并且經常被忽視的工具。 我不會在這里詳細介紹它們的工作方式(使用 力 Google Luke!),但我將快速總結其優勢:

  • 操作系統提供的延遲加載和寫入緩存(您不必自己編寫,并且可以確信操作系統的性能良好)
  • 易于讀取復雜的二進制數據(例如其中編碼有各種相對偏移量的二進制數據)
  • 可用作高性能IPC機制
  • 即使您的進程崩潰(如果操作系統仍然存在)也可以寫入磁盤
  • 因為不阻塞(操作系統提供了異步刷新)并且不需要進入內核模式,所以寫入速度非???

但是,由于所有這些異步性,我感到納悶:如果發生磁盤故障,會發生什么? 操作系統如何通知您的進程它無法將寫入的內容寫入磁盤?

一點點搜索就找到了答案:

  • 在Linux下,當操作系統嘗試將內存寫回到磁盤但失敗時, 您的進程將獲得SIGBUS 。
  • 在Windows下,您下次嘗試在文件句柄上調用OS函數時,會收到EXCEPTION_IN_PAGE_ERROR錯誤

為了確認信息,我提出了一個快速測試程序 ,將一個犧牲USB驅動器插入筆記本電腦并進行了一些測試。 結論是:

  • 當然,Linux會生成SIGBUS,并且Java(OpenJDK 1.7.0_51-b00)沒有針對它的處理程序,從而導致進程崩潰: # A fatal error has been detected by the Java Runtime Environment: # # SIGBUS (0x7) at pc=0x00007f9bb5042396, pid=26654, tid=140306951444224 # # JRE version: OpenJDK Runtime Environment (7.0_51) (build 1.7.0_51-b00) # Java VM: OpenJDK 64-Bit Server VM (24.45-b08 mixed mode linux-amd64 compressed oops) # Problematic frame: # v ~StubRoutines::jlong_disjoint_arraycopy

    從好的方面來說,您知道自從您的流程停止以來,出現了嚴重錯誤。 不利的一面是,您可能不會立即采取行動(除非您已經閱讀了這篇文章)

  • 如果您嘗試刷新文件,Linux也可以生成更多“傳統”錯誤情況,例如: Exception in thread "main" java.io.IOException: Input/output errorat sun.nio.ch.FileDispatcherImpl.force0(Native Method)at sun.nio.ch.FileDispatcherImpl.force(FileDispatcherImpl.java:76)at sun.nio.ch.FileChannelImpl.force(FileChannelImpl.java:376)at Main.main(Main.java:84)
  • Windows僅在再次對文件句柄進行操作時才會生成異常(例如,像在Linux中那樣將其分散化,但是在創建新映射時(在Linux中則沒有這種體驗)): Exception in thread "main" java.io.IOException: The volume for a file has been externally altered so that the opened file is no longer validat sun.nio.ch.FileDispatcherImpl.size0(Native Method)at sun.nio.ch.FileDispatcherImpl.size(FileDispatcherImpl.java:96)at sun.nio.ch.FileChannelImpl.size(FileChannelImpl.java:307)at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:849)at Main.main(Main.java:64)

結論:內存映射文件很棒–就像一把鋒利的刀子一樣很棒:您可以非??焖俚厥褂盟鼈儊碜龃笫?#xff0c;但是它們也可以使您不勝其煩。 如果由于其優點而要使用內存映射文件,則它們具有以下優點:

  • 準備崩潰。 制定一個計劃何時發生(熱備用,熱備用,什么都不做–這些都是有效的選項,但要事先決定)
  • 如果要確保數據在磁盤上,請刷新它 。 當返回時,您可以(幾乎)確定數據在磁盤上(我們不會在這里進入磁盤/控制器高速緩存或虛擬服務器的奇妙世界)。

參考: Transylvania JUG博客上的JCG合作伙伴 Attila Mihaly Balazs 在Java中使用內存映射文件時檢測(寫入)失敗 。

翻譯自: https://www.javacodegeeks.com/2014/03/detecting-write-failures-when-using-memory-mapped-files-in-java.html

內存映射文件 寫入 卡住

總結

以上是生活随笔為你收集整理的内存映射文件 写入 卡住_在Java中使用内存映射文件时检测(写入)失败的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。