JAXB 将内存大小 XML 减少到对象

JAXB reduce memory size XML to 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。

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

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

所示

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

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