【问题标题】:OutOfMemoryError: Java heap space on remote windows machineOutOfMemoryError:远程 Windows 机器上的 Java 堆空间
【发布时间】: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。

标签: out-of-memory heap-memory


【解决方案1】:

您的程序没有足够的内存来运行。您可以使用 -Xmx jvm 选项设置最大堆大小。

例如如果你的程序是一个可执行的 jar,分配最大 80MB 你可以使用

$java -Xmx80m -jar executatable.jar

更多信息请参见https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

【讨论】:

  • 如果我的远程机器只有 4GB,我可以分配多少?因为我不知道我的课程在执行时需要多少,
  • 从技术上讲,您可以分配非常接近 4GB 的内存供操作系统运行。但除非您正在开发数据密集型应用程序,否则不建议这样做。您是否尝试过分析您的应用程序?我建议您还查看代码是否您的程序实际上可以处理传入的数据而不会耗尽内存。一个好的开始点是程序崩溃时得到的转储“java_pid3696.hprof”。
  • 我设法解决了我刚刚分配 1028 的问题并且它有效。仅供参考,我确实下载了数据转储,但到那时我已经解决了问题。感谢您的反馈。
【解决方案2】:

@curiousprgrammer,我将 -Xmx80m 设置为 -Xmx1028m 似乎问题与 jvm 相关,而不是实际的物理内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2012-03-18
    • 2018-06-09
    相关资源
    最近更新 更多