【问题标题】:How to handle large XM File Java Around 5 GB如何处理大约 5 GB 的大型 XM 文件 Java
【发布时间】:2017-06-12 01:17:51
【问题描述】:

我的应用程序需要使用最大为 5 GB 的 XML 文件中的数据。我在从 XML 分类的图像中加载数据。 Image 类有很多属性,比如 Path、Name、MD5、Hash 和许多其他类似的信息。

5 GB 的文件中包含大约 5000 万个图像数据,当我解析 xml 时,数据被加载到应用程序内,并且在应用程序内创建了相同数量的图像类,我对其执行不同的操作和计算.

我的问题是当我解析这样一个非常大的文件时,我的记忆会吃光。我猜所有的数据都加载到内存中。由于代码的复杂性,我无法提供整个代码。我有一种有效的方法来处理如此大量的课程。我做了一整夜的研究,但没有成功,有人能指出我正确的方向吗?

谢谢

【问题讨论】:

  • 我假设您知道不要使用 DOM 解析器,而是使用 SAX 或 StAX 等流解析器,对吧?但你没有提到这一点——为什么?您究竟如何解析数据?
  • 我使用 SAX 解析器,但由于数据量如此之大,应用程序内存占用了 5000 万个图像对象,如果我增加内存,应用程序可以正常工作。应用程序数据也可以从 sqlite 加载,我也从那里得到同样的问题,问题是数据量如此之大,我猜如此大量的对象都在 RAM 内。
  • 是的,在解析 xml 后,如果我想将来使用数据,数据会保存在 sqlite 中,我可以从 sqlite 中加载,这比解析 xml 快得多,但是当数据量超过,图像类有重要参数,如图像路径,名称,所以我必须将所有数据加载回应用程序,再次创建相同数量的对象,

标签: java xml bigdata


【解决方案1】:

您需要某种管道将数据传递到其实际目的地,而无需一次将其全部存储在内存中

我不知道您的代码是如何进行解析的,但您不需要将所有数据存储在内存中。

这是 implementation 读取大型 XML 文件的一个很好的答案

【讨论】:

    【解决方案2】:

    如果您正在使用 SAX,但您正在消耗内存,那么您做错了什么,我们无法在不查看您的代码的情况下告诉您您做错了什么。

    我建议使用 JVisualVM 获取堆转储并查看哪些对象占用了内存,然后调查创建这些对象的应用程序部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多