gpt4 book ai didi

java - VisualVM 堆大小不遵循已用大小

转载 作者:行者123 更新时间:2023-12-01 07:55:03 27 4
gpt4 key购买 nike

我正在使用 VisualVM 来分析 javafx 8 应用程序,该应用程序执行一些绘图操作,并且使用的内存比我想要的多得多。它似乎没有泄漏,但由于某种原因,我的总堆永远不会减少,即使当我选择不同的文件来绘制图表时,我使用的堆会上下波动。所有的峰值都是在我绘制一个新文件时出现的,然后在我退出该屏幕时回落的,但总堆只是猛增并保持不变。这正常吗?

enter image description here

最佳答案

是的,这很正常。 JVM 从操作系统分配更多堆内存并且不会将其返还,但实际使用情况可能会有所不同,即堆中当前未使用的部分可能会发生变化。

一个原因是从操作系统分配内存的成本较高,而且数据一旦写入实际上可能会碎片化。垃圾收集可能会释放内存块,因此已使用的大小会减少,但仍然使用的 block 可能会分布在整个堆内存中。

我不确定 JVM 实际上如何详细处理该问题(事实上,不同的 JVM 可能会以不同的方式处理该问题),但您可能会查找在这种情况下使用的空闲列表、伙伴系统等。

有人可能会说,JVM 可以在垃圾收集后对内存进行“碎片整理”,然后释放多余的堆内存,但这会对性能造成相当大的影响,特别是如果大量数据必须在 RAM 甚至虚拟/中移动时交换内存。与许多计算问题一样,这是空间和 CPU 使用率之间的权衡。

关于java - VisualVM 堆大小不遵循已用大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31339999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com