我已经在Java VM参数定义-Xmsx 1.3GB和我的Eclipse不允许比这更多,运行应用程序时,我得到了以下异常:在线程“应用程序终止上堆大小
异常线程3 “java.lang.OutOfMemoryError:Java堆空间
我该怎么办?
我已经在Java VM参数定义-Xmsx 1.3GB和我的Eclipse不允许比这更多,运行应用程序时,我得到了以下异常:在线程“应用程序终止上堆大小
异常线程3 “java.lang.OutOfMemoryError:Java堆空间
我该怎么办?
您可以使用-mx1300m等来设置日蚀使用的最大内存量。这个限制是因为你在Windows上运行32位的java。在64位操作系统上,你不会有这个问题。
但是,它的最大内存大小,你为每个应用程序在eclipse中设置的重要。你在eclipse中的运行选项中设置了什么?
你可能想看看积极的堆选项http://java.sun.com/docs/hotspot/gc1.4.2/#4.2.2.%20AggressiveHeap|outline 它解决了我的一个类似的问题。
正如OP所做的那样,当从最大化的Eclipse(即使用-Xmx1300m)启动应用程序时,我不会这么做。您有责任将机器推入VM抖动。 – 2010-10-24 10:57:33
你的问题很清楚:
如果对这两个问题中的任何一个的答案都是“否”,那么就试试......两者。 (尤其是,如果您未为子JVM设置至少-Xmx,则会得到默认堆大小,这相对较小。)
如果这两个问题的答案都是“是”,那么问题是,你正在运行到您的硬件和/或操作系统配置的界限:
在一个典型的32位的Windows,一个用户进程只能寻址虚拟存储器的总2个** 31字节,其中一些将被JVM二进制文件,本地库和各种非堆内存分配所使用。 (在32位Linux上,我相信你可以达到2**31 + 2**30
)。这个“修复”是使用64位操作系统和64位JVM。
此外,JVM对OS可以通过虚拟内存子系统的资源请求的内存量有限制。这通常以可用RAM和用于分页的光盘文件/分区的大小之和为界。 “修复”是为了增加分页文件/分区的大小。增加更多内存也可能是一个好主意。
我没有放任何参数,你建议用哪个参数来解决这个问题? – Tamir 2010-10-24 10:22:02
用于运行应用程序的VM参数,而不是用于运行eclipse的VM参数。 – 2010-10-24 23:31:09