如何避免Java中的OutOfMemoryError?

0 java java-ee

我是Java新手.我有这个2 GB xml文件,我需要解析并将其数据存储到数据库中.

StackOverflow上的某个人建议我将Dom4j用于长xml文件.解析做得很好,但是返回的Document(由Dom4j)很长并且在迭代时将所有DOM对象加载到内存(堆)中.

这导致内存不足异常.有人可以帮我解决这些错误吗?我们是否在Java中有一些现象用于Java中的按需堆分配和沉积?

Bri*_*new 5

你有两个选择:

  1. 重新配置JVM以分配更多的最大内存(通过-Xmx2g或类似内容).见此处获得更多信息.此选项显然也受限于您的操作系统和系统中的可用内存量.
  2. 使用流式 API(例如SAX),它不会立即将所有XML加载到您的内存中,而是通过您的进程流式传输,允许您分析它而无需将整个doc保存在内存中

第一个选项可能会立即帮助您,而不是特定于此问题.第二种选择是更具可扩展性的解决方案,因为它允许您分析任何大小的文档.当然,您需要担心分析结果的内存消耗,但这完全是另一回事.