【问题标题】:understanding application memory usage了解应用程序内存使用情况
【发布时间】:2015-01-13 20:53:45
【问题描述】:

我的应用程序针对不同的性能计数器显示以下值。

我有两个问题。

  1. 我认为 # of Bytes in all Heaps 代表 .net 内存使用情况 所有堆。如果这是正确的,那应该等于堆大小 Gen 0、1、2 和大对象堆,这里不是这种情况。

  2. 保留字节表示 .net 使用的可用内存 满足下一个分配要求。在那种情况下不应该保留 字节总是大于提交的字节,但事实并非如此 在这里。

有人可以解释一下我在这里误解了什么吗?

【问题讨论】:

    标签: .net memory-management garbage-collection performancecounter


    【解决方案1】:

    问题 1

    根据Microsoft documentation

    Gen 0 显示代中可以分配的最大字节数 0;它不指示当前分配的字节数 第 0 代。

    所以#Bytes in all Heaps 等于Gen 1 heap sizeGen 2 heap sizeLarge Object heap size。你可以算算。

    问题 2

    再次引用Microsoft documentation

    虚拟内存可以处于三种状态:

    • 免费。该内存块没有对其的引用,可用于分配。

    • 保留。该内存块可供您使用,不能用于任何其他分配请求。但是,您不能存储 数据到这个内存块,直到它被提交。

    • 承诺。内存块分配给物理存储。

    所以# Total committed Bytes 是当前使用的内存总量,# Total reserved Bytes 是尚未提交(物理存储)的保留内存。

    我的理解是保留字节已为您准备好,但物理存储尚未准备好接收您的数据。

    【讨论】:

    • 提交的总字节数和所有堆中的#Bytes 之间是否有任何关系?这两个不应该一样吗?
    • 这是另一个很好的问题。除了一个(堆)是另一个我想不出别的子集。我的猜测(有人可能会纠正我)是两者之间的区别在于可用于新分配的内存。
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2019-04-18
    • 2011-03-09
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多