内存基础知识
下面的列表总结了重要的 CLR 内存概念。
- 每个进程都有其自己单独的虚拟地址空间。 同一台计算机上的所有进程共享相同的物理内存,如果有页文件,则也共享页文件。
- 默认情况下,32 位计算机上的每个进程都具有 2 GB 的用户模式虚拟地址空间。
- 作为一名应用程序开发人员,你只能使用虚拟地址空间,请勿直接操控物理内存。 垃圾回收器为你分配和释放托管堆上的虚拟内存。
如果你编写的是本机代码,请使用 Win32 函数处理虚拟地址空间。 这些函数为你分配和释放本机堆上的虚拟内存。 - 虚拟内存有三种状态:
- 可用。 该内存块没有引用关系,可用于分配。
- 保留。 内存块可供你使用,并且不能用于任何其他分配请求。 但是,在该内存块提交之前,你无法将数据存储到其中。
- 提交。 内存块已指派给物理存储。
- 可能会存在虚拟地址空间碎片。 就是说地址空间中存在一些被称为孔的可用块。 当请求虚拟内存分配时,虚拟内存管理器必须找到满足该分配请求的足够大的单个可用块。 即使你具有 2 GB 的可用空间,2 GB 的分配请求也有可能会不成功,除非所有这些空间必须位于单个的地址块中。
- 如果用完保留的虚拟地址空间或提交的物理空间,则可能会用尽内存。
即使在物理内存压力(即物理内存的需求)较低的情况下也会使用页文件。 首次出现物理内存压力较高的情况时,操作系统必须在物理内存中腾出空间来存储数据,并将物理内存中的部分数据备份到页文件中。 该数据只会在需要时进行分页,所以在物理内存压力非常低的情况下也可能会进行分页。
什么是内存不足的征兆?
内存不足的征兆包括性能差、内存不足的通知以及显示问题。例如,如果当计算机内存不足时您尝试打开程序中的菜单,则此程序可能响应很慢或者显示停止响应。如果出现菜单,则您尝试单击某项时它可能不响应,或者它可能不显示所有项目。如果单击某个菜单项,该菜单可能也会消失并且屏幕上为空白区域,而不显示您正在使用的文档或文件的内容。
计算机有两种类型的内存即随机存取内存 (RAM) 和虚拟内存。所有程序都使用 RAM,但是当没有足够 RAM 用于正尝试运行的程序时,Windows 会临时将通常存储在 RAM 中的信息移动到硬盘上称为分页文件的文件中。临时存储在分页文件中的信息量也称为虚拟内存。使用虚拟内存,换句话说就是从分页文件中来回移动信息,可以为程序释放足够的 RAM 以便程序正确运行。
当计算机 RAM 不足时会出现内存不足的问题,并且虚拟内存也会不足。当运行的程序多于计算机上设计支持安装的 RAM 时会发生这种情况。 当程序没有释放其不再需要的内存时也会发生内存不足的问题。该问题称为“内存使用过度”或“内存泄漏”。
如何防止出现内存不足的问题
一次运行较少的程序可以有助于防止出现内存不足的问题并防止信息丢失。最好观察哪些程序显示内存不足状况的征兆并尽量不同时运行它们。
但是,运行有限数量的程序并不总是方便的或实际的。内存不足的征兆可能表示计算机需要更多的 RAM 来支持使用程序。以下是解决或防止出现内存不足的问题的推荐方法:
- 增加页面文件(虚拟内存)的大小
计算机第一次内存不足时,Windows 会自动尝试增加页面文件的大小,但是您也可以手动将其增加到由安装的 RAM 量确定的最大值。尽管增加页面文件的大小可以帮助防止出现内存不足的问题,但是它也会使您的程序运行速度更缓慢。由于计算机从 RAM 中读取信息的速度大于从硬盘(页面文件所在的硬盘)中读取的速度,因此使程序使用太多的虚拟内存将使其速度减慢。
有关详细信息,请参阅更改虚拟内存的大小。 - 安装更多 RAM
如果您看到内存不足的征兆或者如果 Windows 警告您关于内存不足的问题,请检查计算机附带的信息,或与计算机制造商联系以确定计算机兼容的 RAM 类型,然后安装更多的 RAM。若要安装 RAM,请检查制造商提供的信息。
有关详细信息,请参阅查明您计算机的 RAM 的数量。 - 确定程序是否过度使用内存
如果只要您运行某些程序,计算机就会出现内存不足,则这些程序中的一个或多个程序可能有内存泄露。若要停止内存泄露,需要关闭程序。为了修复内存泄露,您需要检查程序是否有更新或者与软件的发布者联系。