内存不足:Java 堆空间,但在查看堆空间时最大使用 50 MB
Posted
技术标签:
【中文标题】内存不足:Java 堆空间,但在查看堆空间时最大使用 50 MB【英文标题】:Getting Out Of Memory: Java heap space, but while viewing heap space it max uses 50 MB 【发布时间】:2011-01-25 12:00:21 【问题描述】:我正在使用 ASANT 运行一个指向 NARS.jar 文件的 xml 文件。 (我没有NARS.jar的项目文件)
我收到“java.lang.OutOfMemoryError:Java 堆空间”。
我在运行 NARS.jar 时使用 VisualVM 查看堆,它说它最多使用 50 MB 的堆空间。
我已将堆空间的初始大小和最大大小设置为 512 MB。
有没有人知道可能出了什么问题?
我有 1 GB 物理内存并创建了一个 5 GB 页面文件(用于测试目的)。
提前致谢。
【问题讨论】:
如果您引用您的-Xmumble
设置,这可能会有所帮助 - 也许您的堆空间设置有错误?
set ANT_OPTS="-XX:+HeapDumpOnOutOfMemoryError" "-Xms512m" "-Xmx512m" ...... etc 是否可以设置 Java 堆设置,尤其是针对 Java?还是我必须为应用程序设置它?
set ANT_OPTS is btw set in Asant.bat
【参考方案1】:
您的应用可能正在尝试分配超出 512m 限制的内存,因此即使只使用了 50m,您也会看到内存不足错误。为了测试这一点,我会设置:
-Xms512m -Xmx1024m
然后看看会发生什么。我也会尝试一个较小的测试文件,比如 1g。继续减小文件大小,直到您不再看到错误为止。如果你成功了,那么问题就在于你正在尝试做的事情以及你尝试做的方式需要太多的记忆。是时候寻找替代方法了。
【讨论】:
【参考方案2】:XML 文件是众所周知的内存占用者,因为 DOM 表示通常需要十倍于它们在磁盘上的大小。
我猜这是你达到极限的地方。是否存在内存不足异常的堆栈跟踪?
【讨论】:
仅当使用 DOM 而不是 SAX 或 VTD-XML 来解析 XML 文件时。【参考方案3】:在运行 NARS.jar 文件时,您是否正在分叉该进程?设置 ANT_OPTS 只会对运行 ant 系统的 VM 产生影响。如果您使用 java 任务来启动/派生额外的 VM 进程,则不会继承 ANT_OPTS 设置。
如果是这种情况,请在 java 任务中设置 fork="false"(如果您没有使用任何其他需要启用 fork 的选项),或者设置 maxmemory="512m"。
【讨论】:
以上是关于内存不足:Java 堆空间,但在查看堆空间时最大使用 50 MB的主要内容,如果未能解决你的问题,请参考以下文章