分页空间,JVM和内存映射文件(nio)

时间:2012-01-10 15:38:20

标签: java memory-management file-io jvm nio

我最近阅读了一篇文章,声称使用内存映射文件可以节省调页空间。

问题1:为什么这是一个重要的好处?

那就是澄清一下,我会提出这个问题:

问题2:如果我使用JVM,在标准Linux发行版上运行(比方说)1G或RAM,并打开一个800MB的文件 - 调页空间将占用JVM内存的百分比是多少?

此外,该文件将占用的其他资源是什么?

我想我要问的真正问题是:

问题3:在处理JVM读取的大文件时,我们如何定义“调页空间”,以及内存映射文件为应用程序提供的关键(非显而易见)优势是什么(即什么时候它们是理想的替换常规旧文件流)?

我认为这与使用JVM文件内存映射实现分页的方式有关。

1 个答案:

答案 0 :(得分:5)

  

问题1:为什么这是一个重要的好处?

我认为它指的是交换空间。如果使用堆或直接内存,则可以将其交换为交换空间。这是一个表现明智的非常糟糕的想法,但它可能会发生。内存映射文件被分页到那些文件。

保存交换空间不是一个大问题恕我直言,但它确实意味着您不必重新配置您的系统,因为您的应用程序想要使用大量的虚拟内存。

您永远不希望将堆交换到磁盘。

  

问题2:如果我有一个JVM,在标准的Linux发行版上运行(比方说)1G或RAM,而我打开一个800MB的文件 - 调页空间将占用JVM内存的百分比是多少?

直接内存和内存映射文件不计入您的堆。如果您的堆使用了近1 G并且最大值为1 G,则可以打开800 MB文件。在任何情况下都不会使用交换空间。

  

问题3:在处理JVM读取的大文件时,我们如何定义“分页空间”,以及内存映射文件的关键(非显而易见)优点是什么?

我不知道你的调页空间是什么意思。也许你可以定义调页空间对你意味着什么。

内存映射文件的主要好处是可以利用大量数据,让操作系统担心读入或写入磁盘的部分。该区域可能比物理内存大得多,甚至大于您拥有的磁盘空间量。

将8 TB文件映射到Java内存http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

的示例