Stanford CoreNLP(Eclipse)中的内存错误

时间:2012-07-03 04:44:11

标签: java eclipse stanford-nlp

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.OutOfMemoryError:Java堆空间

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

4 个答案:

答案 0 :(得分:2)

Eclipse问题是你不需要设置Eclipse获取的内存量(eclipse.ini文件),而是设置Java程序从Eclipse运行的内存量。这在Run|Run Configurations中详细说明,详见other stack overflow answers

但是,你是否使用32位JVM运行?您可能需要使用64位JVM运行才能为Stanford CoreNLP分配足够的内存以便快速运行。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

如果你正在做-Xmx1500m,这可能还不够。其他数字中提到的数字,仅仅是例子,是不够的。如果我使用-Xmx3500m运行,这足以允许管道的Coreference Resolution部分通过。熟悉Eclipse的人可以说,这就是需要64位的区域(如Chris所说),如果你选择了32位工具,Eclipse将不会让你分配那么多堆内存。

答案 3 :(得分:0)

OOM或OOME(OutOfMemoryError)只是意味着JVM内存不足。发生这种情况时,您基本上有两个选择:

1.允许JVM使用-Xmx VM参数使用更多内存。例如,允许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