pagefile是什么文件(pagefile在哪里)

前沿拓展:

pagefile是什么文件

pagefile.sys是系统临时交换文件,$RECYCLE.BIN是回收站文件,这两个都是系统产生的文件不必删除。眼不见为净的方法就是:点开我的电脑,点工具项,选取文件夹选项,再选 查看,点下面的还原为默认值就行了


最近遇到一个需求,要做超大文件的读写(2G以上)。我们知道,如果使用传统的流读写,这么大的文件,内存直接爆了,根本不可能完成。由此研究到了MappedByteBuffer

MappedByteBuffer的一个能力就是它可以让我们读写那些因为太大而不能放进内存中的文件。有了它,我们就可以假定整个文件都放在内存中(实际上,大文件放在内存和虚拟内存中),基本上都可以将它当作一个特别大的数组来访问,这样极大的简化了对于大文件的修改等操作。

MappedByteBuffer底层使用的技术是内存映射。

所以讲MappedByteBuffer之前,先讲下计算机的内存管理

先看看计算机内存管理的几个术语:MMU:CPU的内存管理单元。物理内存:即内存条的内存空间。虚拟内存:计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。虚拟内存一般使用的是页面映像文件,即硬盘中的某个(某些)特殊的文件.操作系统负责页面文件内容的读写,这个过程叫”页面中断/切换”。页文件:操作系统反映构建并使用虚拟内存的硬盘空间大小而创建的文件,在windows下,即pagefile.sys文件,其存在意味着物理内存被占满后,将暂时不用的数据移动到硬盘上。缺页中断:当程序试图访问已映射在虚拟地址空间中但未被加载至物理内存的一个分页时,由MMC发出的中断。如果操作系统判断此次访问是有效的,则尝试将相关的页从虚拟内存文件中载入物理内存。为什么会有虚拟内存和物理内存的区别?

如果正在运行的一个进程,它所需的内存是有可能大于内存条容量之和的,如内存条是256M,程序却要创建一个2G的数据区,那么所有数据不可能都加载到内存(物理内存),必然有数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,再调度进入物理内存。

什么是虚拟内存地址和物理内存地址?

假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址00xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制。

计算机会对虚拟内存地址空间(32位为4G)进行分页从而产生页(page),对物理内存地址空间(假设256M)进行分页产生页帧(page frame),页和页帧的大小一样,所以虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。

问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,使之失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,保证了所有的页都会被调度。

现在来看看什么是虚拟内存地址和物理内存地址:

虚拟内存地址:由页号(与页表中的页号关联)和偏移量(页的小大,即这个页能存多少数据)组成。

举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,接着把页帧号和偏移量传给MMU组成一个物理上真正存在的地址,最后就是访问物理内存的数据了。

对大多数操作系统来说,做内存文件映射都是一个昂贵的操作。所以MappedByteBuffer适用于对大文件的读写。对于小文件直接用普通的读写就好了。

使用

MappedByteBuffer继承自ByteBuffer,所以ByteBuffer有的能力它全有;像变动position和limit指针啦、包装一个其他种类Buffer的视图啦,都可以。

你可以把整个文件(不管文件有多大)看成是一个ByteBuffer。

java.lang.Object
java.nio.Buffer
java.nio.ByteBuffer
java.nio.MappedByteBuffer

一个简单的读写示例

pagefile是什么文件(pagefile在哪里)

使用MappedByteBuffer整个过程非常快。

映射的字节缓冲区是通过FileChannel.map 方法创建的。映射的字节缓冲区和它所表示的文件映射关系在该缓冲区本身成为垃圾回收缓冲区之前一直保持有效。

官方是这样说的:

The buffer and the mapping that it represents will remain valid until the buffer itself is garbage-collected.

A mapping, once established, is not dependent upon the file channel that was used to create it. Closing the channel, in particular, has no effect upon the validity of the mapping.

这就可能一些问题,主要就是内存占用和文件关闭等不确定问题。被MappedByteBuffer打开的文件只有在垃圾收集时才会被关闭,而这个点是不确定的。

比如说,先用MappedByteBuffer map到一个源文件。进行复制操作。结束后想删掉源文件。

删除是会失败的,主要原因是变量MappedByteBuffer仍然持有源文件的句柄,文件处于不可删除状态。

但是和官方并没有给出释放句柄的操作。网上有人贡献一段代码,可以解决这个问题。

pagefile是什么文件(pagefile在哪里)

估计后续官方会优化掉这个缺陷。

参考文章

https://www.jianshu.com/p/f90866dcbffc

https://www.cnblogs.com/ironPhoenix/p/4204472.html

拓展知识:

pagefile是什么文件

pagefile.sys就是
虚拟内存
(简称为系统分页文件)。是属于
系统文件
而且还是受保护的系统文件,它在系统中的作用就是当系统的
内存不足
时系统把需要的
预读文件
的数据先放在硬盘上保存。一般等于你的内存大小或者虚拟内存大小,可以在别的操作系统下删除,但是你下次登陆,他又自动生成。
删除的方法大体有下面几种:
方法一:
1.依次点击:开始——运行,在运行中输入
gpedit.msc
点击“确定”打开“
组策略
”。
2.在“组策略”左侧框中依次展开“计算机配置”、“安全设置”、“本地策略”,在“本地策略”项下找到“安全选项”。
3.双击“安全选项”右侧“策略”中的“关机:清理虚拟内存
页面文件
”,修改为“已启用”,点击“确定”退出修改。
方法二:
1.
右击
“我的电脑”,选择“属性”打开“系统属性”对话框。
2.单击“性能”选项,在“高级设置”区域中,单击“虚拟内存”按钮。弹出“虚拟内存”对话框。
3.在“虚拟内存”对话框中选择合适的硬盘、硬盘分区。在此建议:对于硬盘分区,应该选择足够大空间的;对于硬盘,应该选择速度最快的。如果安装了两个硬盘,可以将Windows虚拟内存交换文件分别保存到两个硬盘中,但不是一个硬盘的两个分区中,这样可以有效地提高系统对虚拟内存交换文件的存取性能。对于内存设置,选中“用户自己指定虚拟内存设置”单选按钮,然后在“最小值”和“最大值”选项中分别设置
虚拟交换
文件大小的准确数值即可。
4.设置完成后,单击“确定”按钮,保存设置退出,重新启动Windows系统即可。
如果你不想删除pagefile.sys文件,你可以把它放到其他盘里。方法如下:
右击“我的电脑/属性”,然后在对话框的“高级”标签下单击“性能”下的“设置”按钮,在”性能选项”对话框中切换到“高级”标签下,再单击“虚拟内存”下的“更改”按钮,即可根据需要更改页面文件的大小——先选中
C盘
,然后选“无分页文件”,再点“设置”按钮;之后选中要生成该文件的
盘符
,在下面点选“自定义大小”并输入合适的数值,此数值通常为
物理内存
的1.5倍,再单击“设置”,最后确定,重新启动电脑,该文件就在其他分区上了。

pagefile是什么文件

  pagefile.sys是
虚拟内存
文件,相当于将一部分硬盘空间作为存放暂时不用的系统或
软件
交换数据信息所用,在未关闭虚拟内存的情况下,也是不能删除的。
  而且不建议关闭虚拟内存,它不仅仅是作为
物理内存
的补充,很多软件在使用过程中也会自动调用到虚拟内存,可以提高软件使用的稳定性,并对降低物理内存使用也有点帮助。
  若是觉得它占用空间,则建议移动到其它分区中。若是XP,可点击
我的电脑
,选择属性,在高级选项卡中点击性能
选项卡
中的设置,再在高级选项卡中点击虚拟内存下的更改
按钮
,选中其它空间充裕的分区,可自定义大小,也可选择
系统管理
的大小,点击设置。然后再选择
C盘
,点击无分页文件,点击设置并重启电脑即可转移。

pagefile是什么文件

其作用是拿一部分的硬盘空间来当作内存使用,先把内存中一些闲置太久的数据存到硬盘上,等你要回头再用的时候,再从Pagefile.sys里调出。
如果你关闭了虚拟内存,当然可以删掉,那个文件就是系统为虚拟内存保留的磁盘空间;反之如果你没有关闭虚拟内存,你也删不掉这个文件,是受系统保护的

本回答被提问者采纳

pagefile是什么文件

pagefile.sys文件是系统文件,不能删除,也无法删除。
pagefile.sys文件实际上就是windows系统的虚拟内存文件,默认情况下位于C盘,内存有多大,这个文件就有多大。这个文件是windows系统正常运行必须的基本条件,系统不允许删除。
注意,强行关闭虚拟内存文件,将导致系统崩溃!

原创文章,作者:趣淘网小编,如若转载,请注明出处:http://www.3322388.com/75728.html

发表评论

邮箱地址不会被公开。 必填项已用*标注