为什么即使部分空间可以存储更多数据,部分RAM(比如说80%)也会使设备滞后很多?我期望它可以正常运行直到99%。
我注意到在移动设备上比在PC上更多,因为它具有较小的RAM,例如,我的移动设备具有2 GB RAM。当我的可用RAM少于1 GB时,它会滞后很多!即使仍有约1 GB的使用空间,为什么会发生这种情况?
为什么即使部分空间可以存储更多数据,部分RAM(比如说80%)也会使设备滞后很多?我期望它可以正常运行直到99%。
我注意到在移动设备上比在PC上更多,因为它具有较小的RAM,例如,我的移动设备具有2 GB RAM。当我的可用RAM少于1 GB时,它会滞后很多!即使仍有约1 GB的使用空间,为什么会发生这种情况?
Answers:
这里涉及很多事情,但是我将尽我所能简单地以适用于几乎所有操作系统的方式来解释它。
这里有2条基本原则:
RAM中需要的所有内容的总和与RAM中受益的所有内容的总和几乎总是大于RAM的大小。受益于RAM的事物包括进程工作集和备用列表。后者包含的数据和代码曾经处于活动状态,但此后一直不活动。其中大部分将再次使用,其中一些很快就会使用,因此将其保留在RAM中是有益的。此内存充当一种缓存,但并不是真正必需的,因此在可用内存类别中是这样。像空闲内存一样,它可以快速提供给需要它的任何程序。为了性能,备用内存应该很大。
存储块的使用频率远非随机,但可以非常准确地预测。内存分为多个块,通常为4K字节。如果系统运行了足够长的时间,则某些块每秒会被访问多次,而其他块可能会在几分钟,几小时,几天甚至几周内没有被访问。在这两个极端之间使用范围很广。内存管理器知道哪些块最近已被访问,哪些块尚未被访问。有一个合理的假设,即不久将再次需要最近访问过的存储块。近期可能不再需要最近未访问的内存。长期的经验证明这是有效的原则。
内存管理器利用第二个原理来大大减轻第一个原理的不良后果。为此,它起到了平衡的作用,即将最近访问的数据保留在RAM中,而将很少使用的数据保留在原始文件或页面文件中。
当RAM充足时,此平衡操作很容易。许多最近使用的数据可以保留在RAM中。这是一个好情况。
当工作负载增加时,事情变得更加复杂。正在使用的数据和代码的总和较大,但RAM的大小保持不变。这意味着可以将其较小的子集保留在RAM中。一些最近使用较少的数据不再可以在RAM中,而必须保留在磁盘上。内存管理器非常努力地在活动使用的内存和可用内存之间保持良好的平衡。但是随着工作量的增加,内存管理器将被迫为正在运行的进程提供更多可用内存。这不是一个好情况,但是内存管理器别无选择。
问题在于,在程序运行时将数据移入和移出RAM需要花费时间。当内存充足时,它不会经常发生,甚至不会被注意到。但是,当RAM使用率达到较高水平时,它会更频繁地发生。这种情况可能变得如此糟糕,以至于将数据移入和移出RAM所花费的时间比实际使用它所花费的时间更多。这很糟糕,内存管理器非常努力地避免这种事情,但是工作量很大,这通常是无法避免的。
内存管理器就在您身边,即使在不利条件下,也始终尽力保持最佳性能。但是,当工作负载很大且可用内存不足时,它必须做坏事才能保持运行。实际上,那是最重要的。首先是使事情保持运行,然后使之尽可能快。
memory manger
是我OS
权利的一部分吗?因此,如果我正在处理指针和这些非常低级的内容,它仍然可以进行分页吗?
所有现代操作系统都使用其他方式未使用的内存来缓存数据,以便可以从快速RAM而不是较慢的存储访问数据。他们通常会将其报告为可用内存,因为应用程序可以清除缓存并在需要时使用它,但实际上仍在使用它。它越少,可以缓存的数据就越少,并且计算机的速度就越慢。
该答案大部分已被重写,以重新组织结构并使消息更清晰。我也将其作为社区Wiki答案打开了;随时编辑。
分页是一种内存管理方案,通过该方案,固定大小的内存块将分配有进程。当内存使用率上升到较高水平(即80%的容量)时,分页开始从RAM扩展到vRAM(虚拟RAM)。
vRAM位于系统存储中,通常位于硬盘驱动器中,或位于其他相当大的存储位置中。
进程已分配给硬盘驱动器的一部分以作为内存运行,并将其部分视为RAM。这是一个完全正常的过程,但是,当往返于vRAM传输数据所花费的时间增加时,系统性能就会降低。
虽然可以通过CPU从主板直接访问专用RAM,从而提供快速连接,但虚拟RAM必须在主板和vRAM位置之间横向布线。
但是,这仅会对性能造成轻微影响。当对vRAM进行分页的速率急剧增加时(当专用RAM接近容量时),就会发生颠簸。
淘汰是一种将内存页面快速转移到虚拟内存中的做法。由于必须花费更多的时间来获取和处理数据,因此这对性能造成了巨大的损失。
假设您要写下一个30位数长的数字。您既可以使用记事本坐在屏幕旁边进行书写(使用专用内存),也可以记住5块大块,进入下一个房间,然后将其写在您的记事本中(使用虚拟内存)。两者都能完成工作,但是哪个会更快?
在这里找到更多有关thashing的信息!
非常感谢这个答案的贡献者,包括丹尼尔B(Daniel B),异种激素(Xenoid)和乔恩本特利(Jon Bentley)。
这是因为OS必须执行大量分页(加载活动程序的一部分)和交换(将RAM中的数据移动到HD,反之亦然)才能保持软件运行。当需要加载可能比可用的20%更多的空间的新页面时,操作系统将必须换出RAM中它认为不太可能很快使用的现有页面。特别是在其他程序启动时。换入和换回页面会花费大量时间,并且会大大降低PC的性能,因为您现在以HD而不是RAM的速度工作。
它在HDD上有一点帮助,可以在HD上创建一个特殊的分区,并将其分配为专用的“交换”空间(不要将其用于“实际”文件)空间,因此交换受HD碎片的影响较小。
请记住,硬盘驱动器比RAM 慢一个数量级,而RAM本身并不是一开始就那么快(在整个体系结构中)。按照访问速度的顺序(每个梯级比上面的梯级慢一个数量级),您可以
虚拟内存管理器是一个赌徒。它打赌您不需要一直都使用所有RAM,因此可以进行有根据的猜测,并掷骰子,使您的文档程序(在您阅读本文的最后10分钟一直在后台)非常重要,并将其推向HDD。
但是,然后您单击回到文档!现在,VMM必须从HDD加载所有这些数据。更糟糕的是,如果您的RAM不足,它现在必须将其他数据(更多赌博)推送到HDD,以释放可用空间。Linux喜欢住在这里。它将用经常使用的数据填充RAM的绝大部分(对于处理很少的服务器来说是非常好的)。