通过Tess Ferrandez' Blog阅读垃圾收集,她说收集有三种可能的原因:
- 当您分配新对象并达到第0代预算时,即新对象是否会导致超出预算。
- 当有人调用GC.Collect(感应GC)
时- 基于记忆压力
醇>
我理解第1点和第2点,但第3点的记忆压力是什么意思?
我原以为它是系统中可用的通用内存,但如果系统确实耗尽了所有内存,那么我想整个系统都会蓝屏。
这实际上意味着我的内存压力?它与超出一代人的预算有何不同?
答案 0 :(得分:0)
在第3点中,Tess指的是Windows在可用内存不足的情况下发送的“低内存通知”。应用程序可能会收听该通知 - 在发生更糟糕的事情之前以某种方式做出反应(例如,保存其关键数据等等)。性能良好的应用程序甚至可以尝试通过修剪自己的内存使用来帮助操作系统。
CLR正在侦听低内存通知。当它发生时,GC被触发,通常,它会使GC更具侵略性。好处是相互的,因为减少内存压力有助于系统中的所有应用程序(包括.NET应用程序本身)。
当发送确切的低内存通知时,没有很好地记录。根据内部System.Runtime.Caching.PhysicalMemoryMonitor
类中的注释,反过来基于内部Windows实现的注释,当占用大约97-99%的物理内存时,将发出低内存通知信号(取决于物理RAM量)安装在系统中。)