堆积空间让孩子们使用JDOM2

时间:2017-08-24 14:39:13

标签: java xml heap jdom-2

我正在尝试使用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) {
}

2 个答案:

答案 0 :(得分:1)

DOM读取完整的xml文档并将其加载到RAM中。如果你的RAM大小有问题,你应该考虑使用另一个xml解析库,如SAXStAX

使用其中一个也会加快代码速度,因为您可以有选择地从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的字符空间,再多一些用于开销)。

请参阅Java java commandline help