gpt4 book ai didi

Java堆增长

转载 作者:行者123 更新时间:2023-11-30 02:54:48 24 4
gpt4 key购买 nike

我正在开发一个桌面 Java 应用程序,并尝试使用 Java VisualVM 在运行时优化内存使用。

问题是,我注意到我使用的堆增长了大约 1mb/s,我正在尝试找出导致它的原因。它看起来像这样:

enter image description here

首先,我注意到 JVM 似乎在运行时自行分配了大量内存。我尝试制作一个只是 hibernate 的虚拟程序,并且已用堆的增加似乎约为 0.2Mb/s。

但是,我的应用程序显然分配了更多。我知道我在运行时创建了相当多的对象,但它不应该接近 MB/s,更像是字节/秒。

所以,我做了一些转储并比较了它们。这是第一个,当调用新的 GC 时:

enter image description here

这是另一个,已用堆已增长约 100MB:

enter image description here

比较如下:

enter image description here

现在,令我困惑的是我在两个转储中找不到额外 100 mb 的任何痕迹。

总字节数相同。类(class)是一样的。实例大致相同。而且比较没有给我任何提示。然而,转储证实我只分配了少数几个类。那么什么给出了呢?

更新 1:使用 eclipse 内存管理器:

enter image description here

(嫌疑人不是罪魁祸首)。我想强调的是,VisualVM 向我展示了转储时已用堆的 100MB 差异。我的应用程序内

print("Used Mbs: " + (r.totalMemory() - r.freeMemory())/mb);

也证实了这一点。 (“r”是运行时实例)

最佳答案

我不认为你有问题。

您需要了解 JVM 内存模型和代数。

年轻一代的锯齿图案就是这样说的。这就是垃圾收集器在做的工作。

您看到的永久增长的东西是 perm gen(或者它是针对 JDK 7 及更早版本)。这就是字符串、.class 字节代码等所在的地方。

关于Java堆增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574790/

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