“记忆压力”是什么意思?

Ban*_*San 6 .net windows clr garbage-collection memory-management

阅读Tess Ferrandez关于垃圾收集的博客,她说收集有 3 种可能的原因:

  1. 当您分配一个新对象并且达到第 0 代预算时,即新对象是否会导致其超出预算。
  2. 当有人调用 GC.Collect (Induced GC)
  3. 基于内存压力

我理解第 1 点和第 2 点,但是第 3 点中的内存压力是什么意思?

我原以为这是系统中可用的通用内存,但如果系统真的用光了所有内存,那么我想整个系统都会蓝屏。

内存压力实际上是什么意思?它与超过一代人的预算有何不同?

Kon*_*osa 6

在第 3 点中,Tess 提到了 Windows 在可用内存耗尽时发送的“内存不足通知”。应用程序可能会监听该通知 - 在更糟糕的情况发生之前做出某种反应(例如,保存其关键数据等等)。表现良好的应用程序甚至可能尝试通过削减自己的内存使用量来帮助操作系统。

CLR 正在侦听内存不足通知。当发生这种情况时,GC 就会被触发,并且通常会使 GC 变得更加激进。好处是相互的,因为减少内存压力有助于系统中的所有应用程序(包括 .NET 应用程序本身)。

何时发送内存不足通知并没有很好的记录。根据内部System.Runtime.Caching.PhysicalMemoryMonitor类中的注释(又基于内部 Windows 实现的注释),当大约 97-99% 的物理内存被占用时(取决于系统中安装的物理 RAM 量),会发出低内存通知信号。 。