什么是私有字节、虚拟字节、工作集?

2024-02-12

我正在尝试使用 perfmon windows 实用程序来调试进程中的内存泄漏。

这是 perfmon 对这些术语的解释:

工作集是该进程的工作集的当前大小(以字节为单位)。工作集是进程中的线程最近接触的内存页集。如果计算机中的可用内存高于阈值,则即使页面未在使用中,它们也会保留在进程的工作集中。当可用内存低于阈值时,将从工作集中修剪页面。如果需要它们,它们将在离开主内存之前软故障回到工作集中。

虚拟字节是进程正在使用的虚拟地址空间的当前大小(以字节为单位)。虚拟地址空间的使用并不一定意味着磁盘或主内存页面的相应使用。虚拟空间是有限的,进程会限制其加载库的能力。

私人字节是该进程已分配且不能与其他进程共享的内存的当前大小(以字节为单位)。

这些是我的问题:

我应该测量私有字节来确定进程是否有任何泄漏,因为它不涉及任何共享库,并且任何泄漏(如果发生)将来自进程本身?

该进程消耗的总内存是多少?是虚拟字节还是虚拟字节和工作集的总和?

私有字节、工作集和虚拟字节之间有什么关系吗?

还有其他工具可以更好地了解内存使用情况吗?


这个问题的简短回答是这些值都不能可靠地指示可执行文件实际使用了多少内存,并且它们都不适合调试内存泄漏。

私人字节指进程可执行文件拥有的内存量要求- 不一定是金额实际使用。它们是“私有的”,因为它们(通常)排除内存映射文件(即共享 DLL)。但是 - 这里有一个问题 - 它们并不一定排除记忆由这些文件分配。无法判断私有字节的更改是由于可执行文件本身引起的,还是由于链接库引起的。私有字节也是not完全物理内存;它们可以被分页到磁盘或备用页列表中(即不再使用,但也尚未被分页)。

工作集指的是总数physical进程使用的内存 (RAM)。然而,与私有字节不同,这还包括内存映射文件和各种其他资源,因此它的测量精度甚至比私有字节还要低。这与任务管理器的“内存使用情况”中报告的值相同,并且近年来一直是无数混乱的根源。工作集中的内存是“物理的”,因为它可以在没有页面错误的情况下进行寻址;然而,备用页面列表是also物理上仍在内存中,但未在工作集中报告,这就是为什么当您最小化应用程序时,您可能会看到“内存使用情况”突然下降。

虚拟字节是总数虚拟地址空间被整个进程占用。这就像工作集,从某种意义上说,它包括内存映射文件(共享 DLL),但它还包括备用列表中的数据以及已被调出并位于磁盘上某处页面文件中的数据。在重负载下,系统上每个进程使用的总虚拟字节数加起来将比机器实际拥有的内存多得多。

所以关系是:

  • 私有字节是您的应用程序实际分配的字节,但包括页面文件使用情况;
  • 工作集是非分页专用字节加上内存映射文件;
  • 虚拟字节是工作集加上分页专用字节和备用列表。

这里还有一个问题;正如共享库可以在应用程序模块内分配内存一样,导致应用程序的私有字节中报告潜在的误报,your应用程序也可能最终在内部分配内存shared模块,导致错误底片。这意味着您的应用程序实际上可能存在内存泄漏,而该泄漏根本不会在专用字节中体现出来。不太可能,但有可能。

私有字节是合理的近似您的可执行文件正在使用的内存量,可以用来帮助缩小范围内存泄漏的潜在候选者列表;如果你看到这个数字不断地、无休止地增长,你会想要检查该过程是否有泄漏。然而,这不能prove是否存在泄漏。

实际上,在 Windows 中检测/纠正内存泄漏的最有效工具之一是视觉工作室 http://msdn.microsoft.com/en-us/library/x98tx3cf(VS.80).aspx(链接转到有关使用 VS 解决内存泄漏的页面,而不是产品页面)。理性净化 http://www-01.ibm.com/software/awdtools/purify/是另一种可能性。微软还有一个更通用的最佳实践文件 http://msdn.microsoft.com/en-us/library/dd744766(VS.85).aspx关于这个话题。这里列出了更多工具上一个问题 https://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows.

我希望这能澄清一些事情!跟踪内存泄漏是调试中最困难的事情之一。祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是私有字节、虚拟字节、工作集? 的相关文章

随机推荐

  • 如何选择 mysql 中最新的条目?

    我想从表中选择最新的条目 看看该条目是否与用户尝试输入的条目完全相同 如何执行查询 从最近的 发布 条目中选择 query Select FROM confused here SELECT FROM posting ORDER BY dat
  • 显示对话框片段时未调用 AndroiddispatchKeyEvent

    当我的对话框片段是hide dispatchKeyEvent工作得很好 Override public boolean dispatchKeyEvent KeyEvent event Toast makeText FragmentPlaye
  • 如何在reactjs中管理树组件中的状态

    我已经为此苦苦挣扎了几天 试图找出 反应 的方式来做到这一点 基本上 我有一棵树 一个可以任意嵌套的列表列表 列表 我想要一个能够显示它并启用重新排列的组件 这是我的数据 var data id 1 id 2 children id 3 c
  • WooCommerce REST API - 获取订单的自定义字段

    我正在使用 WooCommerce REST API http woocommerce github io woocommerce rest api docs introduction http woocommerce github io
  • 如何使用rvm升级ruby on Rails应用程序的ruby版本

    如何使用 rvm 安全地升级我的 ruby on Rails 应用程序以使用新的 ruby 版本 假设您的应用程序是 my app 并且您正在使用 ruby 版本 a b c 并且想要转到 ruby 版本 x y z Step 0 开始之前
  • Itunes Connect 将桌面显示为 iPad 应用程序的平台

    今天我注意到 iTunes Connect 销售和趋势部分有了新皮肤和一些新功能 但是我公司的应用程序 仅适用于 iPad iPhone 似乎可以在桌面上下载 有谁知道 桌面 对于 iOS 应用程序意味着什么 它适用于 Mac 应用商店应用
  • Android:GraphView 如何在 X 轴上实现时间?

    我发现很难弄清楚如何在 Android 中的图表的 X 轴上实现时间 这是我的代码 for int i 0 i lt listSize i String onlyReading mData get i getReading split re
  • gem 和插件有什么区别?

    我是 Rails 新手 对 gems 和插件的概念感到困惑 谁能为我解释一下吗 插件只是从特定目录加载的库 gems 通过加载Bundler http gembundler com or RubyGems http rubygems org
  • WCF - 设计参数决策

    我正在为基金管理设计一项服务 基金管理服务有一个名为 UpdateFundApprovalDate FundDTO 基金 的操作 此操作将使用fundingID 的批准日期更新资金表记录 该服务将由 FundManagementUI 客户端
  • SQL 使用 CASE 语句更新列中的行

    我有两个表 用户和 TempTable 它是用户的子集 我想更新 Users 表中的 IsActive 列 如果 TempTable 中的用户也在 Users 表中 我想设置 IsActive 1 否则设置 IsActive 0 从不在 T
  • 如何从传奇中发送重击?

    我知道我不应该尝试从 sagas 中发送 thunks 这违背了 redux saga 试图做的事情 但我正在一个相当大的应用程序中工作 大部分代码都是用 thunk 编写的 我们正在按位迁移 需要从 saga 内部调度 thunk thu
  • 使用 java 编写 .ics iCal 文件

    我正在尝试使用 java 实现我自己的 iCal 创建器 但由于某种原因我无法识别我的 ics 文件 我想知道我做错了什么 我可以获得与维基百科的示例完全相同的输出 ics 文件和我的程序生成的一次文件有什么区别 他们的例子 BEGIN V
  • 运行多个实例时无法启动logstash - path.data 设置

    你好 我是 ELK 堆栈内部的新手 在后台运行一个logstash进程 当它找到匹配的文件模式时 它如下所示 我想了解这里的重要性是什么path data选项 请帮帮我 FATAL logstash runner Logstash coul
  • swig 用变量扩展模板类

    我正在为模板类构建 Swig 接口 在我的 pyinterface i 文件中 我声明 template myclass MyClass
  • Matlab 3d 体积可视化和 3d 叠加

    问题几乎就是标题 我有一个作为原始数据加载的 3d 体积 256 256 256 size A 它仅包含零和一的值 其中 1 代表结构 0 代表 空气 我想在 MATLAB 中可视化该结构 然后对其运行算法并在其上覆盖一个覆盖层 假设颜色为
  • node-mysql 一个查询中的多个语句

    我在用着nodejs 10 26 express 3 5 node mysql 2 1 1 MySQL Server Version 5 6 16 我有 4 个 DELETE 只需要 1 个数据库请求 所以我用 连接 DELETE 命令 但
  • Flask url_用于生成 http URL 而不是 https

    我在用url for当用户注销时生成重定向 URL return redirect url for index external True 但是 当我将页面更改为https连接 将url for仍然给我http 我想明确询问url for
  • Laravel 空白白页

    我在群组中的获取路线有问题 这是我的代码 Route group prefix gt commodities function Route get commodities as gt showCommodities uses gt Comm
  • Python格式整数转换为固定长度字符串[重复]

    这个问题在这里已经有答案了 我想根据一个生成一个字符串int和零一起 并且长度应该始终为5不多也不少 For example Consider a Integer 1 Formatted String 00001 Consider a In
  • 什么是私有字节、虚拟字节、工作集?

    我正在尝试使用 perfmon windows 实用程序来调试进程中的内存泄漏 这是 perfmon 对这些术语的解释 工作集是该进程的工作集的当前大小 以字节为单位 工作集是进程中的线程最近接触的内存页集 如果计算机中的可用内存高于阈值