2
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 中运行了这个示例代码,但它给出了以下错误:Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.dissim.crf.ser.gz ... Exception in thread "main" java .lang.OutOfMemoryError:Java 堆空间

虽然当我从 Command Propmt 运行 Stanford CoreNLP 时一切正常。谁能告诉我解决方案?它与 Eclipse 的内存分配有关吗?

4

4 回答 4

2

Eclipse 的问题是您需要设置的不是 Eclipse 获得的内存量(eclipse.ini文件),而是从 Eclipse 运行的 Java 程序获得的内存量。这在其他堆栈溢出答案Run|Run Configurations中详细说明。

而且,您是否使用 32 位 JVM 运行?您很可能需要使用 64 位 JVM 才能为 Stanford CoreNLP 分配足够的内存以正常运行。

于 2012-07-11T15:08:16.937 回答
1

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

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

这里改变堆大小然后你的程序不会OOM

于 2012-07-03T05:36:23.170 回答
1

我想我应该和 Chris 一起给出一个特定于这个问题(Core-NLP)的答案(即一些内存值),而不仅仅是一些带有 Eclipse 指导的标准 Java。

如果你正在做 -Xmx1500m,那可能还不够。其他数字中提到的数字,诚然只是作为示例,是不够的。如果我使用 -Xmx3500m 运行,这足以让管道的共指解析部分通过。熟悉 Eclipse 的人可以看出,这是需要 64 位的区域(正如 Chris 所说),如果您选择了 32 位工具,Eclipse 不会让您分配那么多堆内存。

于 2014-01-19T06:18:15.907 回答
0

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最小堆大小 64mb 和-Xmx256m最大堆大小 256mb 而不是Helloworld把你的classname

于 2012-07-03T05:17:45.987 回答