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的内存分配有关吗?
5条答案
按热度按时间jk9hmnmh1#
Eclipse的问题在于,您需要设置的不是Eclipse获得的内存量(
eclipse.ini
文件),而是从Eclipse运行的Java程序获得的内存量。这在Run|Run Configurations
中指定,如other stack overflow answers中详细说明的那样。但是,您是否使用了32位JVM?您可能需要使用64位JVM才能为斯坦福大学CoreNLP分配足够的内存,以便顺利运行。
oewdyzsn2#
对于Eclipse,Eclipse.exe附近有
Eclipse.ini
文件在这里改变堆的大小那么你的程序就不会OOM
thigvfpy3#
我认为我应该和Chris沿着给予一个答案(即一些内存值),这个答案是特定于这个问题的(核心NLP),而不仅仅是一些带有Eclipse指导的标准Java。
如果您使用-Xmx 1500 m,这可能是不够的。其他数字中提到的数字(无可否认,这些数字只是作为示例)是不够的。如果我使用-Xmx 3500 m,这足以允许管道的共指解析部分通过。熟悉Eclipse的人可以看出,这是需要64位的区域(正如Chris所说),如果您选择了32位工具,Eclipse将不允许您分配那么多堆内存。
p5fdfcr14#
OOM或OOME(OutOfMemoryError)仅仅意味着JVM内存不足。
1.使用-Xmx VM参数允许JVM使用更多内存。例如,要允许JVM使用1 GB(1024 MB)内存,请执行以下操作:
2.改进/修复应用程序,使其使用更少的内存
我建议您在命令提示符下这样运行
这里,
-Xms64m
最小堆大小为64 mb,-Xmx256m
最大堆大小为256 mb,而不是Helloworld
,请将您classname
cigdeys35#
如果其他人偶然发现此问题:在我的例子中,我可以通过从Java1.8升级到Java14来减少一半甚至更多的内存消耗。