【发布时间】:2015-12-14 09:07:33
【问题描述】:
我开发了一个 java 程序,已部署在远程机器上,它安装了最新的 jre1.8.0_60。我已经使用 jdk1.8.0_60 开发了程序。我已经在我的机器(内存 6GB-64 位)和我同事的计算机(内存 8GB-64 位)上测试了程序,并且程序执行没有任何问题,但是当我在远程机器(内存 4GB-64 位)上执行相同的程序时它抛出这个错误:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid3696.hprof ...
Heap dump file created [217326007 bytes in 2.721 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.StringBuilder.toString(Unknown Source)
at Invoice.GetInvoicesByStatusAndDate(Invoice.java:66)
at ClientSAAJ.GetInvoicesByStatusAndDate(ClientSAAJ.java:75)
at ClientSAAJ.main(ClientSAAJ.java:10)
可能是内存不足还是我进行了某种 java 配置?
【问题讨论】:
-
两者都可以。或者,也许您将不同的数据传递给服务器上的程序(可能是大数据库)。但正如我从堆栈跟踪中看到的那样,您正在构建一个大的
String(它变得非常大,所以最好避免这样做)。也许最好显示来自at Invoice.GetInvoicesByStatusAndDate(Invoice.java:66)的代码以找到问题的根源 -
@НиколайМитропольский 你是对的,它是一个很大的 xml 字符串,但我还有另一个类,它做几乎相同的事情,但该类工作正常。我会尽快放代码。
-
一般来说,如果您将数据从数据库放入 RAM(例如,如果您从数据库中读取所有实体并将它们写入 String-in-RAM ),那么迟早你会用完内存。因此,如果您想将数据库内容转换为 XML - 然后将 XML 直接写入文件,而不是
String。