应用程序终止于堆上

时间:2010-10-24 10:12:40

标签: java heap

我在java VM参数中定义了-Xmsx 1.3GB,而我的Eclipse不允许超过这个,在运行应用程序时我得到了以下异常:

线程“Thread-3”中的异常java.lang.OutOfMemoryError:Java堆空间

我该怎么办?

3 个答案:

答案 0 :(得分:1)

您可以使用-mx1300m等设置eclipse使用的最大内存。此限制将是因为您在Windows上运行32位Java。在64位操作系统上,您不会遇到此问题。

但是,它为eclipse中每个应用程序设置的最大内存大小很重要。您在eclipse中的运行选项中设置了什么?

答案 1 :(得分:1)

你的问题很不清楚:

  • 您是否在新的JVM中运行应用程序?
  • 您是否在子JVM的启动器中设置了-Xmx / -Xms参数?

如果对这两个问题中的任何一个的回答是“否”,那么尝试做两个问题。 (特别是,如果您没有为子JVM设置至少-Xmx,您将获得相对较小的默认堆大小。)

如果这两个问题的答案都是“是”,则问题是您遇到了硬件和/或操作系统配置的限制:

  • 在典型的32位Windows上,用户进程只能处理总共2 ** 31个字节的虚拟内存,其中一些将由JVM二进制文件,本机库和各种非堆内存分配使用。 (在32位Linux上,我相信你最多可以2**31 + 2**30)。对此的“修复”是使用64位操作系统和64位JVM。

  • 此外,JVM受OS专用虚拟内存子系统资源请求的内存量限制。这通常受可用RAM和用于分页的磁盘文件/分区大小的总和限制。 “修复”是为了增加页面文件/分区的大小。添加更多RAM也可能是一个好主意。

答案 2 :(得分:0)

您可能希望查看积极的Heap选项http://java.sun.com/docs/hotspot/gc1.4.2/#4.2.2.%20AggressiveHeap|outline 它为我解决了一个类似的问题。