我正在开发一个程序来处理 PDF 和 SVG 文档(几 MB),并且可以在 Eclipse(Windows)上成功运行该应用程序,其中包含多个文档的循环。根据 Windows 任务管理器的说法,它似乎并没有为每个文档占用更多内存并且使用的内存少于 1 GB。然而,在 Maven 上,它会为第一个文档抛出 OOME 或 GC 开销(典型的肯定报告,并不总是在同一个地方失败)。
Tests run: 5, Failures: 0, Errors: 1, Skipped: 3, Time elapsed: 14.271 sec <<< FAILURE!
testPDFAnalyzerDIR(org.xmlcml.svg2xml.analyzer.PDFAnalyzerTest) Time elapsed: 14.259 sec <<< ERROR!
java.lang.OutOfMemoryError: Java heap space
at sun.nio.cs.UTF_8.newDecoder(UTF_8.java:49)
at java.lang.StringCoding$StringDecoder.<init>(StringCoding.java:116)
at java.lang.StringCoding$StringDecoder.<init>(StringCoding.java:108)
at java.lang.StringCoding.decode(StringCoding.java:167)
at java.lang.String.<init>(String.java:443)
at java.lang.String.<init>(String.java:515)
at nu.xom.Text.getValue(Unknown Source)
at org.xmlcml.graphics.svg.SVGElement.createSubclassedChildren(SVGElement.java:195)
我已经阅读了许多 SO 答案,并在 Windows 环境变量中设置了 MAVEN_OPTS
C:\Users\pm286\workspace\svg2xml-dev>echo %MAVEN_OPTS%
-Xmx2048m -XX:+UseGCOverheadLimit
为什么 Eclipse 不会失败(似乎有足够的内存)并且 maven 是否有任何进一步的解决方法?我很感激我必须去寻找内存泄漏和其他低效率,但我想通过测试来完成这个阶段,以确保正确的操作而不是性能。有什么方法可以让我从程序中获得调试输出,然后得到肯定的报告,这样我就可以告诉即时历史?
马文详细信息:
C:\Users\pm286\workspace\svg2xml-dev>mvn -version
Apache Maven 3.0.3 (r1075438; 2011-02-28 17:31:09+0000)
Maven home: C:\Program Files\maven\bin\..
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: C:\Program Files\java\jdk1.6.0_24\jre
Default locale: en_GB, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
蚀:
Version: Indigo Release
Build id: 20110615-0604