【发布时间】:2013-02-11 12:02:08
【问题描述】:
我对 NLP 很陌生,并且正在使用 GATE。如果我为大型数据集(包含 7K+ 记录)运行我的代码,我会收到 OOM 异常。下面是发生异常的代码。
/**
* Run ANNIE
*
* @param controller
* @throws GateException
*/
public void execute(SerialAnalyserController controller)
throws GateException {
TestLogger.info("Running ANNIE...");
controller.execute(); /**** GateProcessor.java:217 ***/
// controller.cleanup();
TestLogger.info("...ANNIE complete");
}
这是日志:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashMap.putAll(Unknown Source)
at gate.annotation.AnnotationSetImpl.<init>(AnnotationSetImpl.java:111)
at gate.jape.SinglePhaseTransducer.attemptAdvance(SinglePhaseTransducer.java:448)
at gate.jape.SinglePhaseTransducer.transduce(SinglePhaseTransducer.java:287)
at gate.jape.MultiPhaseTransducer.transduce(MultiPhaseTransducer.java:168)
at gate.jape.Batch.transduce(Batch.java:352)
at gate.creole.Transducer.execute(Transducer.java:116)
at gate.creole.SerialController.runComponent(SerialController.java:177)
at gate.creole.SerialController.executeImpl(SerialController.java:136)
at gate.creole.SerialAnalyserController.executeImpl(SerialAnalyserController.java:67)
at gate.creole.AbstractController.execute(AbstractController.java:42)
at in.co.test.GateProcessor.execute(GateProcessor.java:217)
我想知道执行函数到底发生了什么以及如何解决它。谢谢。
【问题讨论】:
-
你是如何启动 GATE 的,确切地说?确切的命令是什么?我认为你会很好地谷歌“线程“主”java.lang.OutOfMemoryError:Java堆空间中的异常”。这很可能是一般 Java 问题,而不是 GATE 问题。
-
@dmn :我不明白你启动 GATE 到底是什么意思?我不是以独立方式使用它,而是在我的代码中嵌入了 GATE JAR 并使用了一些功能。我对它进行了谷歌搜索,通常大多数人更喜欢 -Xmx 来增加堆大小。但是有没有其他办法?
-
是的,没错。使用 -Xmx 增加堆大小时会发生什么?
-
我的 7K 记录的大小约为 2.2 MB。使用 -Xmx 增加堆大小后,它运行的文件大小高达 ~1.87 MB,然后再次崩溃。此外,在这个过程中,它变得超级慢。我已将堆大小增加到 512 MB。