团队用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

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

被折叠的 条评论
为什么被折叠?



