2012-01-10 60 views
1

我最近閱讀了一篇文章,聲稱,使用內存映射文件,調頁空間是守恆的。調頁空間,JVM和內存映射文件(nio)

問題1:爲什麼這是一個顯着的好處?

也就是說,爲了澄清,我會提出這個問題:

問題2:如果我哈瓦一個JVM,與(比如說)1G或在一個標準的Linux發行版RAM運行,我打開一個800MB文件 - JVM內存的多少百分比會被調頁空間佔用?

此外,該文件將佔用哪些其他資源?

我猜我問真正的問題是:

問題3:由JVM讀取大文件打交道時,我們如何定義「分頁空間」,什麼是關鍵(非顯而易見的)好處內存映射文件提供給應用程序(例如,何時它們是常規舊文件流的理想替代品)?

我認爲這與使用JVM文件內存映射實現分頁的方式有關。

回答

5

問題1:爲什麼這是一個顯着的好處?

我假定它指的是交換空間。如果你使用堆或直接內存,它可以交換到交換空間。這是一個非常糟糕的主意,但它可能會發生。內存映射文件被分頁到這些文件。

保存交換空間並不是什麼大問題恕我直言,但這意味着你不必重新配置你的系統,因爲你的應用程序想要使用大量的虛擬內存。

你永遠不希望你的堆被交換到磁盤。

問題2:如果我哈瓦一個JVM,與(比如說)1G或RAM上一個標準的Linux發行版上運行,我打開一個800MB的文件 - 多少百分比的JVM的內存將被調頁空間被佔用?

直接內存和內存映射文件不計入您的堆。如果您的堆使用幾乎1 G並且您的最大值爲1 G,則可以打開一個800 MB文件。在任何情況下都不會使用交換空間。

問題3:在處理由JVM讀取的大文件時,我們如何定義「調頁空間」以及什麼是關鍵(非顯而易見)好處內存映射文件?

我不清楚你是什麼意思的調頁空間。也許你可以定義調頁空間對你意味着什麼。

內存映射文件的主要好處是您可以利用大量數據並讓操作系統擔心要將哪些部分讀入或寫入磁盤。該區域可能比物理內存大得多,甚至大於您擁有的磁盤空間量。

將8TB文件映射到Java內存的示例http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html