首页 > 解决方案 > JAXB 将内存大小 XML 减少为 Object

问题描述

任何减少 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。

标签: javajaxbjava-11

解决方案


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

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

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

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


推荐阅读