gpt4 book ai didi

Java 堆空间 - -Xmx 是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:20 27 4
gpt4 key购买 nike

我在我的应用程序中遇到了臭名昭著的 OutOfMemoryException,我没有简单地增加可用的堆空间量,而是试图查看问题所在,以防万一,出现某种泄漏从我的应用程序。

我添加了 JVM 参数 -XX:+HeapDumpOnOutOfMemoryError,它会在遇到 OutOfMemory 错误时创建堆转储。然后我分析了使用不同分析工具生成的转储文件。然后我开始尝试使用 -Xmx 参数并观察模式。

让我疑惑的是下面的内容。为什么在分析转储时我发现所有对象的总大小远小于我使用 -Xmx 参数设置的总数?例如,假设我将 -Xmx 设置为“2048m”。当我分析转储文件时,我发现堆上总共有 400Mb 的对象。我期待找到 2GB。我错过了什么吗?

最佳答案

我的猜测是,由于现代 GC 将堆划分为单独的内存区域(新生代/老年代/永久代),永久代空间完全填满就足以发生内存不足错误。您可以使用各种 JVM 命令行选项配置不同生成空间的比率。

这是一篇关于 Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine 的好文章(我找不到更新的,但我认为基础知识仍然适用于较新的 VM)。

关于Java 堆空间 - -Xmx 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178698/

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