我正在尝试使用JDOM2读取XML, 我正在我的电脑上测试它没有问题。 当我尝试在Windows Server 2012上使用此程序时问题已经开始,因为当它尝试从文档中获取子项时出现错误“堆空间”。 我试图在Windows Server上为虚拟机添加更多内存,但它无法正常工作。
我尝试使用“SlimJDOMFactory”选项但没有成功。
文档的大小几乎是150MB,并且总共有20.000个元素或多或少。
我该怎么办?
这是我的代码的一部分。
List<prescription> medicamentos = new ArrayList<prescription>();
SAXBuilder builder = new SAXBuilder();
builder.setJDOMFactory(new SlimJDOMFactory());
File prescriptionFile = new File("Download" + File.separator + "Prescripcion.xml");
try {
Document document = (Document) builder.build(prescriptionFile);
Element rootNode = document.getRootElement();
List<Element> list = rootNode.getChildren();
.........
} catch(Exception a) {
}
答案 0 :(得分:1)
DOM读取完整的xml文档并将其加载到RAM中。如果你的RAM大小有问题,你应该考虑使用另一个xml解析库,如SAX或StAX。
使用其中一个也会加快代码速度,因为您可以有选择地从xml文件中读取。 有关差异的更多信息,请查看此问题:Java: Parsing XML files: DOM, SAX or StAX?
这tutorial解释了所有这些用法。
答案 1 :(得分:0)
Java将在Java命令行上消耗尽可能多的内存。仅向VM添加内存将不允许Java使用该内存。
您需要使用Java Commandline的-Xmx
标志来添加更多内存。考虑添加-Xmx512m
以允许Java使用512MB内存(这应该足以包含128MB XML(通常需要至少256MB的字符空间,再多一些用于开销)。