将 XML 写入 OutputStream(TCP 套接字)而不生成/创建太多不可变对象(immutable对象)的最佳方法是什么?
所以我的数据存储在 ConcurrentHashMap 中。我想循环此数据,创建自定义 XML,然后将该 XML 写入 OutputStream。这个过程会是重复的,所以我不想在转换/写入过程中生成太多的对象,这样GC就不会有太大的负担。
我一直在研究 JAXB 和 XStream,以使 Map 到 XML 的转换更容易,但似乎使用 JAXB 中的 XMLAdapter 和 XStream 中的 Converter 方法,我最终会得到在转换过程中创建的对象。
我也愿意自己动手。我想要一个最终重用可变对象的解决方案。
我可以使用 StringBuffer 并使用附加方法连接所有内容(XML 标签和我的数据),然后执行 mystringBuffer.toString().getBytes() 并将字节数组写入输出流。在这种方法中,我可以重用 StringBuffer 和 ByteBuffer。只有 bytearray 每次都会是一个新对象。
还有其他方法吗?
看来我有点超前了,假设内存/GC 可能有问题 - 我可能完全错误,仅仅使用 JAXB 或 XStream 可能是解决方案。然后我可以做一些性能测试来找出瓶颈。
谢谢
最佳答案
同意斯卡夫曼的评论:
I don't think you're giving the garbage collector enough credit - it's extremely good at handling a large number of short-lived objects. Don't worry about object creation overhead until you can see an actual problem with the performance. This question sounds like a classic case of premature optimisation.
所以,是的,我还会做一些性能测试,看看是否存在您需要关注的瓶颈。
(发布此答案主要是为了让这个问题获得更多关注/有竞争力的答案,或者至少是为了将其从不断增长的未回答问题列表中删除。)
关于java - 使用java中的可变对象将XML数据写入OutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783485/