阅读Tess Ferrandez' Blog关于垃圾回收的内容,她说有三种可能导致回收:
- 当您分配一个新对象时,且第0代预算已达到,即如果新对象会导致其超出预算。
- 当有人调用GC.Collect(诱导GC)
- 基于内存压力
我理解前两个点,但第3点中的“内存压力”是什么意思?
我原以为它是系统中可用的总内存,但如果系统真的使用了所有内存,那我想整个系统会蓝屏。
“内存压力”实际上是什么意思?与超过一代的预算有何不同?
阅读Tess Ferrandez' Blog关于垃圾回收的内容,她说有三种可能导致回收:
- 当您分配一个新对象时,且第0代预算已达到,即如果新对象会导致其超出预算。
- 当有人调用GC.Collect(诱导GC)
- 基于内存压力
我理解前两个点,但第3点中的“内存压力”是什么意思?
我原以为它是系统中可用的总内存,但如果系统真的使用了所有内存,那我想整个系统会蓝屏。
“内存压力”实际上是什么意思?与超过一代的预算有何不同?
System.Runtime.Caching.PhysicalMemoryMonitor
类中的注释(该类基于Windows内部实现的注释),低内存通知在物理内存占用量达到97-99%时被触发(取决于系统安装的物理RAM数量)。
OutOfMemoryException
异常。 - BanksySanGC.AddMemoryPressure
和GC.RemoveMemoryPressure
是用来记录正在使用的非托管内存,以便 GC 在计算预算使用时将其纳入考虑。 - BanksySan