帮助理解Windows内存 – “工作集”
我一直在追踪我的应用程序中的一些内存泄漏.这是一个真正的痛苦,但我终于收紧了一切.但是,有一点Windows内存管理让我感到困惑.以下是应用程序内存使用情况的打印输出…
Time PrivateMemorySize64 WorkingSet64 20:00:36 47480,50144 20:01:06 47480,50144 20:01:36 47480,50144 20:02:06 47480,149540 20:02:36 47480,149540 20:03:06 47480,149540 工作装置在30秒的时间内从49 MB跳到146.这种情况在一夜之间发生,因为应用程序基本上什 工作集(任务管理器向我展示)似乎能够受到其他应用程序(如调试器)的影响(正如我在查找内存泄漏时所了解的那样).在阅读了有关工作集的文档后,我仍然没有很好的理解. 任何帮助表示赞赏. 更新:感谢响应者的一些链接以及一些额外的搜索,我更好地了解了一个单独的流程如何导致我的流程的工作集增长.很高兴知道工作集中的峰值并不一定表明你的应用程序正在泄漏…还有理由不依赖任务管理器进行内存评估:) 有用的网址: A few words on memory usage or: working set vs. private working set CyberNotes: Windows Memory Usage Explained
简单地说,工作集是您的进程当前拥有的内存页面的集合,而不是换出(即在RAM中).然而,这有点不准确.现实要复杂得多.
Windows维护每个进程的最小工作集大小和最大工作集大小.最小工作集很简单,它将授予Windows每个进程(只要它可以通过物理限制). 最大工作集更加可疑.如果您的程序使用的内存超过其配额中的内存,Windows将删除一些页面.然而,虽然它们不再在您的工作集中,但这些页面不一定“消失”. 相反,这些页面将从您的工作集中删除并移动到可用页面池中.因此,如果某些其他程序需要更多内存并且没有剩余已清除的页面,则您的页面将被清除,并分配给不同的进程.当您访问它们时,如果您仍然高于最大工作集大小,则需要再次从交换文件中提取它们,可能还要清除其他页面. 但是,如果没有人要求同时获得更多内存(或者无论如何都可以通过未使用的页面满足所有要求),那么访问其中一个页面只会使其“神奇地重新出现”并取而代之的是另一页. 因此,您的进程可以在RAM中拥有比其工作集中更多的页面,但它并不“正式”拥有它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Microsoft.WindowsAzure.targets“指定的路径,文件名或两者
- winapi – Windows 8 SDK中的DirectX
- window系统下的pycharm对虚拟机中的Ubuntu系统操作MySQL数据
- windows-phone-7.1 – 在Windows Phone 7(Mango)上的HttpWe
- Win32下session和window station以及desktop一些介绍和应用
- windows-server-2003 – 将Windows 7 64位打印驱动程序添加
- win10下JDK8的安装与配置
- windows – 什么是系统状态备份?
- windows安装android开发平台
- windows-server-2008 – 无法连接到SSTP VPN – 无法检查吊