【问题标题】:Writing XML Data to OutputStream with Mutable objects in java使用Java中的可变对象将XML数据写入OutputStream
【发布时间】: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


【解决方案1】:

同意斯卡夫曼的意见:

我认为您没有给予垃圾收集器足够的信任 - 这是 极其擅长处理大量的短命对象。 不要担心对象创建开销,直到你能看到一个实际的 性能问题。这个问题听起来很经典 过早优化。

所以是的,我还会做一些性能测试,看看是否存在需要关注的瓶颈。

(发布这个答案主要是为了让这个问题得到一些额外的关注/有竞争力的答案,或者至少简单地将这个从不断增长的未回答问题列表中删除。)

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多