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