[英]Most efficient way to generate XML payload in Java
在我的應用程序中,我有一個 REST 端點(/processRequest),我在其中接收多個參數(clientId、channelId、opId)。 然后使用這些參數生成具有以下結構的 XML 有效負載:
<eCommerceDoc>
<clientId>5</clientId>
<channelId>2</channelId>
<opId>opIdString</opId>
</eCommerceDoc>
在代碼中它看起來像這樣:
@RestController public class RequestController {
@RequestMapping(value="/processRequest")
public String processRequest(
@RequestParam("clientId")int clientId,
@RequestParam("channelId")int channelId,
@RequestParam("opId")String opId
) {
String xml =
"<eCommerceDoc>"
+"<clientId>" + clientId + "</clientId>"
+"<channelId>" + channelId + "</channelId>"
+"<opId>" + opId + "</opId>"
+"</eCommerceDoc>";
sendXMLtoAnotherSystem(xml);
問題在於 memory 的填充速度非常快,我可以看到對於此端點的每個請求,一個新字符串都保存在 memory 中:
在這張圖片中,我們可以看到最后 2 個字符串是被實習的,前 2 個是生成的,因為我觸發了這個示例的 2 個請求。
問題是在進行壓力測試時,即使沒有大負載,這些字符串也會過快地填充堆,導致大量 Minor Gcs,所以我的問題是是否有更好的方法來動態生成 XML(使用 SAX 或某些框架)? 我發現的所有問題都是關於解析的,但在這種情況下,我需要生成實際的 XML 因為它被發送到另一個系統。 謝謝您的幫助。
在您擔心此代碼的性能之前,您應該擔心它的正確性。 目前它是錯誤的:它無法在數據中查找“&”和“<”等特殊字符並按照 XML 的要求對其進行轉義。 我們在 StackOverflow 上收到很多帖子,來自人們詢問如何修復像這樣不小心生成的 XML!
最好使用庫而不是僅通過字符串連接來生成 XML,即使它不會為像這樣的微型 XML 文檔帶來性能改進 - 盡管如果您開始生成更多實質性的 Z3501BB093D363810B67105 文檔,它可能會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.