使用Netbeans的Stanford上的Java堆空间错误

使用Netbeans的Stanford上的Java堆空间错误,java,nlp,netbeans-7,stanford-nlp,Java,Nlp,Netbeans 7,Stanford Nlp,我正在使用Stanford NER解析一个句子以获得以下标记:tokenize、ssplit、pos、引理、NER。我还通过项目->属性->运行->虚拟机选项将netbeans中的内存增加到-Xms1600M-Xmx1600M。但我还是得到了Java的内存异常。 我在Windows7JDK1.7上运行32位java。 这是我的密码 public ArrayList<String> NERTokensRet(String string) { ArrayList<Strin

我正在使用Stanford NER解析一个句子以获得以下标记:tokenize、ssplit、pos、引理、NER。我还通过项目->属性->运行->虚拟机选项将netbeans中的内存增加到
-Xms1600M-Xmx1600M
。但我还是得到了Java的内存异常。
我在Windows7JDK1.7上运行32位java。 这是我的密码

public ArrayList<String> NERTokensRet(String string) {
    ArrayList<String> myArr = new ArrayList<String>();


    props = new Properties();
    props.put("annotators", "tokenize,ssplit,pos,lemma,ner");
    pipeline = new StanfordCoreNLP(props);


    //     String resultString = string.replaceAll("[^\\p{L}\\p{N}]", " ");   
    Annotation annotation = new Annotation(string);
    pipeline.annotate(annotation);
    int j;
    for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
        List<CoreLabel> tokens = sentence.get(CoreAnnotations.TokensAnnotation.class);

        for (j = 0; j < tokens.size(); j++) {
            CoreLabel token = tokens.get(j);
            myArr.add("[" + token.originalText() + "," + token.tag() + "," + token.beginPosition() + "," + token.endPosition() + "]");
        }
        //System.out.println(myArr);
    }

    return myArr;
}
public ArrayList NERTokensRet(字符串){
ArrayList myArr=新的ArrayList();
props=新属性();
道具放置(“注释器”、“标记化、ssplit、pos、引理、ner”);
管道=新StanfordCoreNLP(道具);
//String resultString=String.replaceAll(“[^\\p{L}\\p{N}]”,“”);
注释=新注释(字符串);
管道注释(注释);
int j;
for(CoreMap语句:annotation.get(coreanotations.SentencesAnnotation.class)){
List tokens=句子.get(coreanotations.TokensAnnotation.class);
对于(j=0;j
堆栈跟踪:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:45)
at java.lang.StringBuilder.<init>(StringBuilder.java:68)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:2998)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819)
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1598)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.HashMap.readObject(HashMap.java:1030)
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:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at edu.stanford.nlp.ie.crf.CRFClassifier.loadClassifier(CRFClassifier.java:2255)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1444)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1421)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1500)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1487)
at edu.stanford.nlp.ie.crf.CRFClassifier.getClassifier(CRFClassifier.java:2386)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:130)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifiers(ClassifierCombiner.java:116)
at edu.stanford.nlp.ie.ClassifierCombiner.<init>(ClassifierCombiner.java:98)
at edu.stanford.nlp.ie.NERClassifierCombiner.<init>(NERClassifierCombiner.java:64)
at edu.stanford.nlp.pipeline.StanfordCoreNLP$6.create(StanfordCoreNLP.java:500)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.lang.AbstractStringBuilder。(AbstractStringBuilder.java:45) 位于java.lang.StringBuilder。(StringBuilder.java:68) 在java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:2998)处 位于java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819) 位于java.io.ObjectInputStream.readString(ObjectInputStream.java:1598) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319) 位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 在java.util.HashMap.readObject(HashMap.java:1030) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:597) 位于java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) 位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870) 位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 位于edu.stanford.nlp.ie.crf.crfclassizer.loadClassifier(crfclassizer.java:2255) 位于edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1444) 位于edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1421) 位于edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1500) 位于edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1487) 位于edu.stanford.nlp.ie.crf.crfclassizer.getClassifier(crfclassizer.java:2386) 位于edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:130) 在edu.stanford.nlp.ie.ClassifierCombiner.loadClassifiers(ClassifierCombiner.java:116) 在edu.stanford.nlp.ie.ClassifierCombiner.(ClassifierCombiner.java:98) 在edu.stanford.nlp.ie.NERClassifierCombiner。(NERClassifierCombiner.java:64) 位于edu.stanford.nlp.pipeline.StanfordCoreNLP$6.create(StanfordCoreNLP.java:500)

有人能尽快提供帮助吗?

stacktrace显示java在加载CoreNLP中用于NER的大型模型(功能和重量)时内存不足。这些确实使用了大量内存,但这仍然是非常令人惊讶的。您不会说您使用的是什么操作系统、什么JDK版本、是否是32/64位等等。但是对于上面的程序(添加了一个main方法并填充了几个类型),在Linux(CentOS 5)上的Java 7u5上,我可以使用-mx700m(32位或64位Java--yay压缩oops)运行它。所以我认为1600m对于任何架构/版本都足够了

因此,我会尝试:

  • 使用更多内存运行,看看这是否会改变情况(如-mx1800m)
  • 如果没有,请确保VM确实获得了上面所述的内存量(即使您所写的看起来是正确的)。例如,尝试打印Runtime.getRuntime().maxMemory()/1024/1024
我卸载了所有东西(java和netbeans)并重新安装了所有东西(java和netbeans)。它仍然无法分配-Xmx1400m,但分配了-Xmx1000m,工作正常。感谢大家的努力。

您是否从netbeans运行该程序?你得到了什么错误?是的,我从netbeans运行它。错误是
java.lang.OutOfMemoryError
我在Windows7JDK1.6上运行32位java。在运行Runtime.getRuntime().maxMemory/1024/1024时,我得到247。我猜我的虚拟机没有得到足够的内存。但为什么呢?升级到JDKversion 1.7后,它仍然无法工作。我试着使用一个旧的模型,即使在那时也不起作用。