【问题标题】:JAXB reduce memory size XML to ObjectJAXB 将内存大小 XML 减少为 Object
【发布时间】:2020-10-14 12:20:03
【问题描述】:

关于在 JAXB 中减少 XML 内存大小的任何建议。

XML 文件大小 - 1 MB

在 Jaxb 中解组后堆中使用的内存 - 7 MB

    System.out.println("heapFreeSize--->"+Runtime.getRuntime().freeMemory());
    JAXBContext jaxbContext = JAXBContext.newInstance(Document.class);
    Unmarshaller unmarshallerJaxb =  jaxbContext.createUnmarshaller();
    Document document  = (Document) unmarshallerJaxb.unmarshal(new File("test.xml"));
    System.out.println("heapFreeSize--->"+Runtime.getRuntime().freeMemory());

我们在 XSD 中有大约 100 个属性,而且都是字符串。由于我们有大量的多个 xml,任何更好的优化都可以减少内存。

【问题讨论】:

  • 除了已用/可用内存量之外,您正在测量任何东西。请阅读此问题 + 答案以了解详情,请致电 Runtime.getRuntime().freeMemory()stackoverflow.com/q/55194152/150978

标签: java jaxb java-11


【解决方案1】:

我不认为以这种方式测量内存使用量会很有效,因为在初始化 JAXB 上下文和执行解组时会实例化很多类。大部分使用的内存会被 GC 释放,下次运行时。

要检查特定对象的内存使用情况,您可以使用 java.lang.instrument 包,如 this answer 所示。

您还可以使用 JDK 中提供的 jconsole 在运行时观察应用程序的内存使用情况。它应该显示对象在使用时使用了多少内存,以及在不再使用后是否释放。

通常 JAXB 非常高效,除非您的应用程序处理非常大的 XML,否则您不应该关心内存问题。

【讨论】:

  • 我们真正的问题似乎只是内存,因为我们有多个 xml(相同的 XSD 有不同的根元素)总大小为 1MB,由 JAXB 解组,每分钟仅处理 1500 个 xml。我们的服务器有 32 个 CPU 和 264GB RAM linux。我们正在内存中加载 1000 个块并解组+丰富+编组。丰富和编组非常非常快。任何关于解组的建议请或任何其他替代方法
猜你喜欢
  • 2013-11-19
  • 1970-01-01
  • 2023-04-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2011-01-08
  • 1970-01-01
相关资源
最近更新 更多