我是Java新手。我有这个2 GB xml文件,我需要解析它并将其数据存储到数据库中。
StackOverflow上有人建议我将Dom4j用于长xml文件。解析做得很好,但返回的Document(由Dom4j)很长,迭代时将所有DOM对象加载到内存(堆)中。
这会导致内存不足异常。有人可以帮我解决这些错误吗?我们是否在Java中有一些现象用于Java中的按需堆分配和沉积?
答案 0 :(得分:5)
您有两种选择:
第一个选项可能会立即为您提供帮助,而不是特定于此问题。第二种选择是更具可扩展性的解决方案,因为它允许您分析任何大小的文档。当然,您需要担心分析结果的内存消耗,但这完全是另一回事。
答案 1 :(得分:1)
如果你需要解析大的XML文件(并且添加到Java堆并不总是有效),你需要一个SAX解析器,它允许你解析XML流而不是将整个DOM树加载到内存中。
您也可以查看SAXDOMIX
SAXDOMIX包含可以转发SAX事件或DOM子树的类 解析XML文档时的应用程序。该 框架定义了允许应用程序获取的简单接口 SAX解析过程中的DOM子树。处理后,所有DOM 子树有资格进行垃圾收集。这解决了DOM 可扩展性问题。