如何通过更好的方式解决内存不足错误



我正在编写一个Java应用程序,允许使用QuineMcCluskey方法最小化任何布尔表达式。当我编译我的代码时,我有一个内存不足错误,并显示消息"Java 堆空间">

如果我理解,异常可能有几个起源:

  • 分配给 JVM 堆的内存空间不足以创建应用程序所需的对象。

  • 内存泄漏可防止垃圾回收器释放尚未使用但仍具有引用的对象。因此,这些对象永远不会被释放,并且在堆中占据越来越多的空间,直到占据所有可用空间。

我知道可能需要使用分析工具来分析 JVM 的内存内容并确定内存消耗的来源。但是如何使用这些工具?我必须修改 xmx 和 xms 数据吗?如果我更改它们会有什么后果? (我也知道有必要优化我的代码)。

有哪些不同的调试步骤?

此外,此应用程序必须由大量用户使用(因此由不同的计算机...

如您所见,我对这个问题有很多疑问(我是新手,哈哈)......这就是我创建这篇文章的原因。我想通过更好的方式解决这个问题,并学习良好的反应能力。

谢谢!

增加内存不是解决方案,除非您拥有无限的资源!

如果这种情况发生在生产或您自己的机器以外的任何机器中,您可以强制运行您的服务的 JVM 生成一个转储文件,然后您可以通过将 VM 标志 -XX:+HeapDumpOnOutOfMemoryError 添加到您的 jvm.conf 文件来下载和分析该文件。

当运行应用程序的机器变得无响应时,这非常有用,因此无法建立JMX连接以运行Oracle的JMC(或类似)监视工具。如果出于某种原因能够访问 VM,则可以运行外部测试记录并尝试分析导致 OOM 的方法。

在此处查看如何使用飞行记录。

并检查此内容以获取堆转储分析预览

可以使用命令行选项增加 JVM 分配的堆大小 在这里我们有 3 个选项

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size
java -Xms16m -Xmx64m ClassName

也可以直接在 eclipse 中增加 JVM 分配的堆大小 在 eclipse IDE 中 goto

运行---->运行配置---->参数

并设置 VM 参数

最新更新