gpt4 book ai didi

java - 这种内存使用模式是否表明我的 Java 应用程序泄漏了内存?

转载 作者:搜寻专家 更新时间:2023-11-01 02:46:43 24 4
gpt4 key购买 nike

我有一个 Java 应用程序等待用户按下一个键然后运行一个任务。完成后,它会返回并再次等待。我正在使用 jvisualvm 查看此应用程序的内存配置文件,它显示出增加的模式。

提交的内存大小为 16MB。在应用程序启动时,已用内存为 2.7 MB,然后随着中间下降(垃圾收集)而攀升。一旦这种锯齿状模式接近 16MB,就会出现大幅下降,内存使用量下降到接近 4MB。不过,这一主要下降点一直在增加。 4MB、6MB、8MB。使用量从未超过 16 MB,但整个锯齿模式正在向 16 MB 攀升。

我有内存泄漏吗?

由于这是我第一次在 StackOverflow 上发帖,没有足够的声誉来发布图片。

最佳答案

现代 SunOracle JVM 使用所谓的分代垃圾收集器:

  1. 当收集器运行时,它首先尝试部分收集,只释放最近分配的内存
  2. 最近创建的仍处于 Activity 状态的对象得到“提升”
  3. 一旦一个对象被提升了几次,它就不会再被部分收集清除,即使它已经准备好收集
  4. 这些对象称为 tenured,只有在需要进行完整收集以便为程序继续运行腾出足够空间时才会清理

所以基本上,您的程序中停留时间足够长以至于被快速“部分”收集遗漏的部分将一直存在,直到 JVM 决定它必须进行完整收集。如果你让它持续足够长的时间,你最终应该会看到完整的收集发生,并且使用量会回落到你原来的起点。

如果那从未发生并且您最终遇到内存不足异常,那么您可能有内存泄漏 :)

关于java - 这种内存使用模式是否表明我的 Java 应用程序泄漏了内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20413321/

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