XStream使用,对象创建的实现

本文探讨了团队使用XStream进行序列化和反序列化时遇到的性能问题,通过分析发现XStream频繁实例化导致YGC增加,从而影响接口调用性能。提出了两种优化方案:静态化XStream实例集和使用枚举单例,以减少内存创建并提高接口响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

团队用XStream实现序列化、反序列化的方案,完成服务之间的接口报文object与xml之间转化,但是过程中发现接口调用有越来越慢的情况,大家相互一顿嫌弃彼此的代码写的烂偷笑,然后开始分析问题——到底是调用越来越慢还是接口服务本身就变慢,发现两种情况均有出现,后来发现有一个子系统的接口服务没有发生变化,看了下代码发现序列化方案用的dom4j(丫的,不按套路出牌啊惊讶)...... 初步判断是xstream问题。然后开始本地模拟调用,观察VisualVm,发现ygc会变大,分析XStream的源码,XStream在new的时候会创建CompositeClassLoader(初始类加载器),并且不断new会不断创建,导致ygc需要扫描的内容越来越多,最终导致接口调用性能下降。

接口调用实例化xstream创建如下:

            XStream xstream = new XStream();
            //根据传入的dto name进行xml转换
            xstream.processAnnotations(reqObjName);
            String xmlStr = xstream.toXML(reqObject);
            
            xmlStr = XmlConverUtil.getValueByKey(xmlStr, "xmlBody");
            resp = handle.sendMsg(xmlHead, xmlStr);
       &nb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值