【发布时间】:2011-07-21 22:16:44
【问题描述】:
在不生成/创建太多不可变对象的情况下将 XML 写入 OutputStream(TCP 套接字)的最佳方法是什么?
所以我在 ConcurrentHashMap 中有我的数据。我想循环这些数据,创建自定义 XML,然后将 XML 写入 OutputStream。这个过程会重复,所以我不想在转换/写入的过程中产生太多的对象,让GC没有太多的负载。
我一直在研究 JAXB 和 XStream,以使 Map 到 XML 的转换更容易,但似乎使用 JAXB 中的 XMLAdapter 和 XStream 中的转换器方法,我最终会得到在转换过程中创建的对象。
我也愿意自己动手。我想要一个最终重用可变对象的解决方案。
我可以使用 StringBuffer 并使用 append 方法连接所有内容(XML 标记和我的数据),然后执行 mystringBuffer.toString().getBytes() 并将字节数组写入输出流。在这种方法中,我可以重用 StringBuffer 和 ByteBuffer。每次只有字节数组是一个新对象。
还有其他方法吗?
似乎我走在了前面,并假设内存/GC 可能存在问题 - 我可能完全错了,仅使用 JAXB 或 XStream 可能是解决方案。然后我可以做一些性能测试来找出瓶颈。
谢谢
【问题讨论】:
-
为什么它们是不可变的?你在线程内还是什么?
-
我认为你没有给予垃圾收集器足够的信任——它非常擅长处理大量的短期对象。在您看到性能的实际问题之前,不要担心对象创建开销。这个问题听起来像是过早优化的经典案例。
-
@skaffman - 您应该将您的评论转换为答案。
标签: java network-programming xml-serialization jaxb xstream