如何以更好的方式解决OutOfMemory错误

问题描述 投票:-3回答:2

我正在编写Java应用程序,允许使用QuineMcCluskey方法最小化任何布尔表达式。当我编译我的代码时,我有一个OutOfMemory错误消息“Java堆空间”!

如果我理解,该例外可能有几个起源:

  • 分配给JVM堆的内存空间不足以创建应用程序所需的对象。
  • 内存泄漏会阻止垃圾收集器释放尚未使用但仍具有引用的对象。因此,这些物体永远不会被释放并占据堆中越来越多的空间,直到占据所有可用空间。
  • ...

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

有哪些不同的调试步骤?

此外,这个应用程序必须被许多用户使用(所以不同的计算机......)

正如你所看到的,我对这个问题有很多疑问(我是一个新手大声笑)...这就是为什么我创建这篇文章..我想以更好的方式解决这个问题,并且学习良好的反应。

谢谢!

java memory out-of-memory
2个回答
1
投票

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

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

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

检查here如何使用飞行记录。

并检查this的堆转储分析预览


0
投票

通过使用命令行选项可以增加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 IDE中增加JVM分配的堆大小

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

并设置VM参数

© www.soinside.com 2019 - 2024. All rights reserved.