斯坦福大学CoreNLP(Eclipse)中的内存错误

yyhrrdl8  于 2022-11-04  发布在  Eclipse
关注(0)|答案(5)|浏览(286)
package src;

import java.util.Properties;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

public class NLPTest {
    public static void main(String[] args){
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
        StanfordCoreNLP coreNLP = new StanfordCoreNLP(props);
    }

}

我在Eclipse中运行了这个示例代码,但它给出了以下错误:正在从edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz加载分类器...线程“main”中出现异常java.lang。内存不足错误:Java堆空间
虽然当我从Command Propmt运行斯坦福大学CoreNLP时一切都运行得很好。有人能告诉我解决方案吗?它与Eclipse的内存分配有关吗?

jk9hmnmh

jk9hmnmh1#

Eclipse的问题在于,您需要设置的不是Eclipse获得的内存量(eclipse.ini文件),而是从Eclipse运行的Java程序获得的内存量。这在Run|Run Configurations中指定,如other stack overflow answers中详细说明的那样。
但是,您是否使用了32位JVM?您可能需要使用64位JVM才能为斯坦福大学CoreNLP分配足够的内存,以便顺利运行。

oewdyzsn

oewdyzsn2#

对于Eclipse,Eclipse.exe附近有Eclipse.ini文件

-Xmn128m
-Xms256m
-Xmx768m
-Xss1m
-XX:PermSize=128m
-XX:MaxPermSize=384m

在这里改变堆的大小那么你的程序就不会OOM

thigvfpy

thigvfpy3#

我认为我应该和Chris沿着给予一个答案(即一些内存值),这个答案是特定于这个问题的(核心NLP),而不仅仅是一些带有Eclipse指导的标准Java。
如果您使用-Xmx 1500 m,这可能是不够的。其他数字中提到的数字(无可否认,这些数字只是作为示例)是不够的。如果我使用-Xmx 3500 m,这足以允许管道的共指解析部分通过。熟悉Eclipse的人可以看出,这是需要64位的区域(正如Chris所说),如果您选择了32位工具,Eclipse将不允许您分配那么多堆内存。

p5fdfcr1

p5fdfcr14#

OOM或OOME(OutOfMemoryError)仅仅意味着JVM内存不足。
1.使用-Xmx VM参数允许JVM使用更多内存。例如,要允许JVM使用1 GB(1024 MB)内存,请执行以下操作:

java -Xmx1024m HelloWorld

2.改进/修复应用程序,使其使用更少的内存

Start the application with the VM argument -XX:+HeapDumpOnOutOfMemoryError. This will tell the VM to produce a heap dump when a OOM occurs:
java -XX:+HeapDumpOnOutOfMemoryError ...

我建议您在命令提示符下这样运行

java -Xms64m -Xmx256m HelloWorld

这里,-Xms64m最小堆大小为64 mb,-Xmx256m最大堆大小为256 mb,而不是Helloworld,请将您classname

cigdeys3

cigdeys35#

如果其他人偶然发现此问题:在我的例子中,我可以通过从Java1.8升级到Java14来减少一半甚至更多的内存消耗。

相关问题