.net 我认为托管堆是动态增长的?

.net 我认为托管堆是动态增长的?,.net,garbage-collection,.net,Garbage Collection,如果我对.NET CLR中的垃圾收集有正确的理解,那么当需要为引用类型分配空间但托管堆上没有更多空间时,就会发生GC。那么,托管堆会有多大的限制呢?谢谢。是的,对于32位进程,虚拟地址空间限制为2GB(如果将所有CLR的开销考虑在内,更现实的情况是大约为1.5GB)。64位进程的限制为8TB 这并不意味着堆一开始是2GB,而是说堆可以增长到该大小。CLR将根据需要分配更多内存。堆有不同的代(编号为0到2),每个代都有一个阈值。正是这些阈值的满足触发了垃圾收集。在应用程序运行时,这些阈值将进行调整

如果我对.NET CLR中的垃圾收集有正确的理解,那么当需要为引用类型分配空间但托管堆上没有更多空间时,就会发生GC。那么,托管堆会有多大的限制呢?谢谢。

是的,对于32位进程,虚拟地址空间限制为2GB(如果将所有CLR的开销考虑在内,更现实的情况是大约为1.5GB)。64位进程的限制为8TB


这并不意味着堆一开始是2GB,而是说堆可以增长到该大小。CLR将根据需要分配更多内存。堆有不同的代(编号为0到2),每个代都有一个阈值。正是这些阈值的满足触发了垃圾收集。在应用程序运行时,这些阈值将进行调整,以最适合应用程序的性能需求。

是的,对于32位进程,虚拟地址空间限制为2GB(如果将所有CLR的开销考虑在内,更现实的情况是大约为1.5GB)。64位进程的限制为8TB


这并不意味着堆一开始是2GB,而是说堆可以增长到该大小。CLR将根据需要分配更多内存。堆有不同的代(编号为0到2),每个代都有一个阈值。正是这些阈值的满足触发了垃圾收集。在应用程序运行时,这些阈值将进行调整,以最适合应用程序的性能需要。

因此,垃圾收集只会在堆使用2GB内存后发生?似乎大多数应用程序都不会运行垃圾收集,因为这是一个相当大的限制。有没有办法监控每一代的大小限制?我真的很想用一种低级的方法来监视何时发生垃圾收集,以加深我的理解。你当然可以!您可以使用perfmon-请看,垃圾收集只会在堆使用2GB内存后发生?似乎大多数应用程序都不会运行垃圾收集,因为这是一个相当大的限制。有没有办法监控每一代的大小限制?我真的很想用一种低级的方法来监视何时发生垃圾收集,以加深我的理解。你当然可以!您可以使用perfmon-请参阅