java - 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。
解决方案
我不认为以这种方式测量内存使用量会很有效,因为在初始化 JAXB 上下文和执行解组时会实例化很多类。GC 下次运行时将释放大部分已使用的内存。
要检查特定对象的内存使用情况,您可以使用 java.lang.instrument 包,如this answer所示。
您还可以使用 JDK 中提供的 jconsole 在运行时观察应用程序的内存使用情况。它应该显示在使用对象时使用了多少内存,以及在不再使用对象后是否释放了内存。
一般来说,JAXB 非常高效,除非您的应用程序处理非常大的 XML,否则您不应该关心内存问题。
推荐阅读
- javascript - 如何编写以键 const - JavaScript 开头的函数?
- appium-android - 发送密钥时出现此错误无效的元素状态错误
- php - 如何在不模糊图像的情况下在 gd 中创建透明背景?
- jquery - 动画 CSS 上的 styled-components v4 语法
- javafx - Java FX 接口延迟加载
- html - 如何在折叠和展开时更改 Bootstrap 3 列表图标
- sql-server - SQL Server 动态数据透视表 - 列名重复
- java - LDAP + Spring:如何正确认证?
- python - 如何基于 pandas 多维数据框计算新变量?
- java - 如何从希伯来日历中的总天数差异计算月份