我知道在SO上已经有很多关于这个问题的讨论,但都没有解决我的问题。我有一个文件test.txt
,我想对它做一些情绪分析。输入文件的格式是每行一句话。我使用以下命令运行该工具:
java -cp "../*" -mx1g edu.stanford.nlp.sentiment.SentimentPipeline -file test.txt
它开始以一种奇怪的方式运行和打印我文件的内容。一段时间后,它会抛出此错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我也试过:
java -Xms1024m -Xmx2048m -cp "../*" -mx1g edu.stanford.nlp.sentiment.SentimentPipeline -file test.txt
但它仍然没有起作用。顺便说一句,我在命令行中运行该工具,而不是eclipse。所以我认为这与日食无关。你能帮我解决这个问题吗?提前谢谢!
这意味着没有足够的空间来分配新对象。就像在这种情况下,垃圾收集器无法腾出空间来容纳新对象。
您可以在命令中将< code>-mx1g更改为< code>-mx4g
尝试使用以下命令:
java -Xms1024m -Xmx2048m -cp "../*" -mx4g edu.stanford.nlp.sentiment.SentimentPipeline -file test.txt
您可以永久增加-Xms和-Xmx大小
窗口:
SET _JAVA_OPTIONS = -Xms1024m -Xmx2048m
Linux:
export _JAVA_OPTIONS="-Xms1024m -Xmx2048m"
之后,您可以简单地运行命令
java -cp "../*" -mx4g edu.stanford.nlp.sentiment.SentimentPipeline -file test.txt
希望它能解决你的问题。如果它不能解决您的问题,那么将-Xmx大小增加到-Xmx6g
可以用Java8。他们将元空间用于堆。因此,不会出现堆空间错误。
如何永久增加Java堆内存?
请使用以下命令进行检查
java -cp "../*" -Xmx4g edu.stanford.nlp.pipeline.StanfordCoreNLPClient -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file test.txt
或者您可以在命令中使用-threads1
使其成为单线程的。