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的内存分配有关吗?
答案 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