Java Stanford POS标记器OutOfMemory读取标记器时出错

Java Stanford POS标记器OutOfMemory读取标记器时出错,java,out-of-memory,stanford-nlp,Java,Out Of Memory,Stanford Nlp,我正在尝试使用Stanford POS标记器,但是在尝试通过 MaxentTagger tagger = new MaxentTagger("english-left3words-distsim.tagger"); 我总是会遇到这样的错误: Reading POS tagger model from stanford-postagger-2013-11-12/models/english-left3words-distsim.tagger ... Exception in thread "ma

我正在尝试使用Stanford POS标记器,但是在尝试通过

MaxentTagger tagger = new MaxentTagger("english-left3words-distsim.tagger");
我总是会遇到这样的错误:

Reading POS tagger model from stanford-postagger-2013-11-12/models/english-left3words-distsim.tagger ... Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.io.ObjectInputStream$HandleTable.grow(ObjectInputStream.java:3443)
  at java.io.ObjectInputStream$HandleTable.assign(ObjectInputStream.java:3250)
  at java.io.ObjectInputStream.readString(ObjectInputStream.java:1628)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1320)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
  at java.util.HashMap.readObject(HashMap.java:1029)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:979)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1873)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1895)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
  at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1895)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
  at edu.stanford.nlp.tagger.maxent.MaxentTagger.readExtractors(MaxentTagger.java:582)
  at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:808)
  at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:755)
  at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:289)
  at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:253)
我在Eclipse中运行它,并根据使用-vmargs-Xms4096M-Xmx4096M-mx44096m的链接指令为jvm分配4gb的堆空间

我在一些搜索中发现了这个错误:这似乎是相关的,但我认为斯坦福标记器的应用如此广泛,我怀疑我是否会是第一个发现这个OutOfMemoryError的人,如果它是由于这个错误


更新:看起来Eclipse实际上并没有得到我试图分配的内存。Runtime.getRuntime.maxMemory报告它只有123Mb可用空间,而同一工作区中的其他项目有1 GB可用空间。

忘记将vmargs添加到项目的运行配置中

将-Xms512m-Xmx1024m-mx512m添加到运行配置的VM参数部分可以正确读取标记器