一尘不染

java.lang.OutOfMemoryError:Java堆空间

java

我在执行多线程程序时遇到以下错误

java.lang.OutOfMemoryError: Java heap space

上面的错误发生在其中一个线程中。

  1. 据我所知,堆空间仅由实例变量占用。如果这是正确的,那么为什么在运行一段时间后会出现此错误,因为在创建对象时分配了实例变量的空间。
  2. 有什么办法可以增加堆空间?
  3. 我应该对程序进行哪些更改,以使其占用更少的堆空间?

阅读 382

收藏
2020-03-02

共1个答案

一尘不染

如果要增加堆空间,可以java -Xms<initial heap size> -Xmx<maximum heap size>在命令行上使用。默认情况下,这些值基于JRE版本和系统配置。你可以在Java网站上找到有关VM选项的更多信息。

但是,我建议对应用程序进行性能分析,以查明为什么吃掉了你的堆大小。NetBeans包含一个非常好的分析器。我相信它使用jvisualvm引擎盖下。使用事件探查器,你可以尝试查找在哪里创建了许多对象,何时收集了对象的垃圾等等。

2020-03-02