"Memory Pressure" 是什么意思?
What is meant by "Memory Pressure"?
通读 Tess Ferrandez' Blog 垃圾回收,她说垃圾回收有 3 个可能的原因:
- When you allocate a new object and the generation 0 budget is reached, i.e. if the new object would cause it to go over-budget.
- When someone calls GC.Collect (Induced GC)
- Based on memory pressure
我理解第 1 点和第 2 点,但是第 3 点中的 内存压力 是什么意思?
我原以为这是系统中可用的一般内存,但如果系统真的用完了所有内存,我想整个系统都会蓝屏。
内存压力究竟是什么意思?这与超出一代人的预算有何不同?
在第 3 点中,Tess 指的是 "low memory notification" 通过 Windows 发送,以防 运行 可用内存不足。应用程序可能会收听该通知——在更糟糕的事情发生之前以某种方式做出反应(例如,保存其关键数据等等)。表现良好的应用程序甚至可能会尝试通过减少自己的内存使用量来帮助 OS。
CLR 正在侦听低内存通知。当它发生时,GC 就会被触发,并且通常会使 GC 更具攻击性。好处是相互的,因为减少内存压力有助于系统中的所有应用程序(包括 .NET 应用程序本身)。
没有详细记录何时发送内存不足通知。根据内部 System.Runtime.Caching.PhysicalMemoryMonitor
class 中的评论,这反过来又基于内部 Windows 实现的评论,当大约 97-99% 的物理内存是低内存通知时发出信号已占用(取决于系统中安装的物理 RAM 数量)。
通读 Tess Ferrandez' Blog 垃圾回收,她说垃圾回收有 3 个可能的原因:
- When you allocate a new object and the generation 0 budget is reached, i.e. if the new object would cause it to go over-budget.
- When someone calls GC.Collect (Induced GC)
- Based on memory pressure
我理解第 1 点和第 2 点,但是第 3 点中的 内存压力 是什么意思?
我原以为这是系统中可用的一般内存,但如果系统真的用完了所有内存,我想整个系统都会蓝屏。
内存压力究竟是什么意思?这与超出一代人的预算有何不同?
在第 3 点中,Tess 指的是 "low memory notification" 通过 Windows 发送,以防 运行 可用内存不足。应用程序可能会收听该通知——在更糟糕的事情发生之前以某种方式做出反应(例如,保存其关键数据等等)。表现良好的应用程序甚至可能会尝试通过减少自己的内存使用量来帮助 OS。
CLR 正在侦听低内存通知。当它发生时,GC 就会被触发,并且通常会使 GC 更具攻击性。好处是相互的,因为减少内存压力有助于系统中的所有应用程序(包括 .NET 应用程序本身)。
没有详细记录何时发送内存不足通知。根据内部 System.Runtime.Caching.PhysicalMemoryMonitor
class 中的评论,这反过来又基于内部 Windows 实现的评论,当大约 97-99% 的物理内存是低内存通知时发出信号已占用(取决于系统中安装的物理 RAM 数量)。