在不生成/創建太多不可變對象的情況下將XML寫入OutputStream(TCP Socket)的最佳方式是什麼?使用Java中的可變對象將XML數據寫入OutputStream
所以我有我的數據在一個ConcurrentHashMap。我想循環這些數據,創建一個自定義XML,然後將XML寫入OutputStream。這個過程是重複的,所以我不想在轉換/寫入過程中產生太多的對象,所以GC沒有太多的負載。
我一直在尋找JAXB和XStream,使地圖到XML轉換更容易,但它看起來像在XStream中的JAXB和轉換器方法中的XMLAdapter,我將最終得到轉換過程中創建的對象。
我也願意推出自己的產品。我想要一個解決方案,最終重用可變對象。
我可以使用StringBuffer並使用append方法連接所有內容(XML標記和我的數據),然後執行mystringBuffer.toString()。getBytes()並將bytearray寫入輸出流。在這種方法中,我可以重用StringBuffer和ByteBuffer。每次只有字節數組將成爲一個新對象。
還有其他方法嗎?
看來我正在超越自我,假設內存/ GC可能有問題 - 我可能完全錯誤,僅僅使用JAXB或XStream就可能是解決方案。然後我可以做一些性能測試來找出瓶頸。
感謝
爲什麼他們是不可變的?你是在一個線程或什麼東西? – Heckman
我不認爲你給垃圾收集器足夠的功勞 - 它非常擅長處理大量短暫的對象。除非您看到實際的性能問題,否則不要擔心對象創建的開銷。這個問題聽起來像是過早優化的經典案例。 – skaffman
@skaffman - 您應該將您的評論轉換爲答案。 – ziesemer