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

jay*_*100 1 java file-io jvm memory-management nio

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

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

也就是说,为了澄清,我会提出这个问题:

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

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

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

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

我假设这与使用JVM文件内存映射实现分页的方式有关.

Pet*_*rey 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