首页 > 解决方案 > “内存压力”是什么意思?

问题描述

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

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

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

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

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

标签: .netwindowsmemory-managementgarbage-collectionclr

解决方案


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

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

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


推荐阅读