我最近阅读了一篇文章,声称使用内存映射文件可以节省调页空间。
问题1:为什么这是一个重要的好处?
那就是澄清一下,我会提出这个问题:
问题2:如果我使用JVM,在标准Linux发行版上运行(比方说)1G或RAM,并打开一个800MB的文件 - 调页空间将占用JVM内存的百分比是多少?
此外,该文件将占用的其他资源是什么?
我想我要问的真正问题是:
问题3:在处理JVM读取的大文件时,我们如何定义“调页空间”,以及内存映射文件为应用程序提供的关键(非显而易见)优势是什么(即什么时候它们是理想的替换常规旧文件流)?
我认为这与使用JVM文件内存映射实现分页的方式有关。
答案 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
的示例