gpt4 book ai didi

Java - 奇怪的堆空间错误不断被抛出

转载 作者:行者123 更新时间:2023-11-30 10:27:11 25 4
gpt4 key购买 nike

人。这是一个非常常见的错误,但无论我做什么,我似乎都找不到解决方法。我使用 IDEA IntelliJ,很长一段时间以来,我一直在尝试实现一个有效的语义角色标签 (SRL) 系统,最后,我决定使用 PathLSTM 模型 ( https://github.com/microth/PathLSTM) 来做同样的事情。

问题是,这个算法依赖于2.7G大小的模型文件来进行解析操作。( https://drive.google.com/uc?id=0B5aLxfs6OvZBYUk2b0hLZjNqY3c&export=download )

这会导致堆空间不足 - 内存不足错误


Loading pipeline from 
C:\Users\Vyso\Downloads\NLP\SRL\SEMAFOR\absSemafor\LTH\wttv\PathLSTM-pre-
illinois-built\srl-ACL2016-eng.model
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.reflect.Array.newInstance(Array.java:75)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1883)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1919)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1919)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)

Process finished with exit code 1

很自然地,我更改了系统上 JVM 和 IDE 的堆空间,我可以在其中更改 vmoptions,如下所示。 (默认情况下是 -Xms128m 和 -Xmx512m)。


# custom IntelliJ IDEA VM options

-Xms2048m
-Xmx4000m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow

但即使在分配了大约 4G 作为最大堆空间之后,我仍然收到错误。有趣的是,在我的 IDE 的内存管理工具栏中,我可以看到代码在运行时最多只使用 500m,所以我真的不知道为什么仍然会抛出这个堆空间错误。

也许这只是我这边的一个初学者级别的错误,但我已经尝试解决这个问题好几天了,如果有人能指导我如何做,我将不胜感激摆脱这个错误。

谢谢。

最佳答案

这里有两个不同的 JVM 实例:

  • 运行 IDEA 的 JVM
  • 运行 PathLSTM 的 JVM

我怀疑这里的问题出在运行 PathLSTM 的 JVM 上。要为 -Xms-Xmx 授予此非默认值,您需要转到 Run > Edit Configurations ... 然后选择运行PathLSTM 调用的配置,然后将 -XmsNNNm -XmxYYYm 添加到 VM options 输入。

您可以使用 JVisualVM (您会在 JDK 的 bin 目录中找到它)以查看运行 PathLSTM 时使用了多少内存。启动 IDEA,然后启动 JVisualVM,您会在应用程序 TreeView 的本地节点下看到一些东西(可能名为“Idea”),然后启动任何运行 PathLSTM 的东西,您会看到另一个条目出现在本地节点下,单击它,然后选择监视器选项卡。默认情况下,右上方显示的图表显示所选应用程序的内存使用情况。您可能会看到使用的堆不断增长,直到该进程出现 OOM,然后更改 Run > Edit Configurations ... 中的 -Xmx 并重试,直到找到所需的值.或者,选择一个非常大的值,然后让 JVisualVM 向您显示实际使用的最大值,然后编辑您的 -Xmx 以匹配该最大值。

这里的重点是:

  • 您对堆大小配置所做的任何更改都必须对实际运行 PathLSTM 的 JVM 实例进行,您可以通过 Run > Edit Configurations ...
  • 配置该 JVM
  • 您可以使用 JVisualVM 来监控那个 JVM 的运行
  • 对于 > 2GB 的堆,您需要运行 64 位 JVM

关于Java - 奇怪的堆空间错误不断被抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com