我进行分析时内存的奇怪行为
Posted
技术标签:
【中文标题】我进行分析时内存的奇怪行为【英文标题】:Strange behavior of memory when i make profiling 【发布时间】:2012-12-07 10:24:54 【问题描述】:我在进行分析时遇到了一个奇怪的问题。我解释说,在下图中,我们可以清楚地看到最大的对象只取35mo
。看这个图:
.但是当我验证同时使用的内存时,我注意到它超过了500mo
有人可以解释一下为什么最大的对象占用最大35mo
,而使用的堆同时超过500
?以及如何计算heap used
?
【问题讨论】:
【参考方案1】:您可能没有对所有对象创建进行概要分析。 Netbeans 中的标准配置文件设置之一仅配置 10 个对象创建中的 1 个。您的测量结果表明 35MB 是您数据的 51%。因此,您总共分析了 70MB。这大约是您测量的总堆大小的 1/10。
一般来说,如果您正在寻找有关谁是最大的记忆消耗者的线索,那么只测量部分创作就足够了。不跟踪所有创作的原因是性能。
如果您想查看所有内存的使用情况,可以执行以下操作:
在 Netbeans 6.9.1 中,这是一个设置为“跟踪每个 ... 对象分配”。您可以降低这个数字(如果十分之一不能帮助您找到问题,也不能告诉您有关应用程序的足够信息)。但是,这可能会导致您的应用程序无法运行。
您还可以进行堆转储。这将不包含有关创建和删除对象的信息,但它会告诉您应用程序中当前处于活动状态的 所有 对象。
【讨论】:
感谢您的回复。我使用 netbeans7.0.1
和我 Track every 10 object allocations
。我可以根据图 1 [Live object, avg life, Generation ...] 给出的特征计算heap used
吗?
你可以近似它(就像我在答案中所做的那样)。但是,除非您对所有内容进行分析,否则您无法得到明确的答案。但是,当您进行堆转储时,您将得到准确的答案。以上是关于我进行分析时内存的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
Spark:MEMORY_ONLY_SER_2 - 奇怪的内存行为
使用 Twitch 进行身份验证时的 Spring-Boot OAuth2 奇怪行为
在使用 Android 2.2 的 HTC Desire 上使用 Android MediaPlayer 进行流式传输时的奇怪行为