java - 使用 JDOM2 获取子对象的堆空间

标签 java xml heap-memory 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) {
}

最佳答案

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

使用其中之一也将加速您的代码,因为您可以有选择地从您的 xml 文件中读取。 有关差异的更多信息,请查看以下问题:Java: Parsing XML files: DOM, SAX or StAX?

tutorial解释了所有这些的用法。

关于java - 使用 JDOM2 获取子对象的堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864493/

相关文章:

C++ - 指向对象的指针数组,什么存储在 STACK 中,什么存储在 HEAP 中?

java - 为什么我们要在文件目录中加正斜杠来区分目录和文件?

java - Java 8 中删除了 JDBC-ODBC 桥,最好的替代方案是什么?

java - IllegalStateException : org. springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@xxxxxxxx 已关闭

java - 在 Java 中动态构建 JSON 请求

xml - 为什么我从 getElementsByTagName 得到 "Invalid predicate"错误?

java - Xml 文档读取尝试错误

jquery - 使用 jQuery 解析 XML 等内容

堆/栈的 C++ 标准术语

java - Java堆内存是连续的吗?