java反射之-性能优化

时间:2022-12-18 21:46:29

在最近的计划中,打算看看在不使用google protobuf的情况下,在原有的采用jackson作为json序列化工具的基础上,是否可以实现进一步的性能优化。主要是针对list的情况。

测试的时候选择了一个50个字段的对象,采用50条记录的list作为例子。因为大部分还都是可控的系统rpc交互,所以测试的时候选择了将字段用逗号分隔的方式。

在反射机制中,Reflection和BeanInfo两种均作了测试,method/field都做了缓存的前提,结果中与原生jackson序列化、反序列化性能相差在20%以内,并无明显的提升。

同时,在测试中将class缓存后性能提升约10%,将setAccessible设置为true后性能提升也在10%左右。字符串的解析并没有太大的性能消耗,反而是invoke消耗了绝大部分的性能。

所以,至少就原生的Java反射机制而言,性能并没有明显的提升(当然,性能跟字段数还是有一定的关系,如果字段数较少、行数没有那么多,那么class每次加载的比例可能会增加)。

PS:今日,我们通过在pojo设计上的优化,在不利用protobuf的情况下,已经实现了一种pojo反序列化实现性能提升至少20倍的方法,该特性借助了运行时字节码修改技术javassist以实现应用透明性,很快我们会将该特性集成至rpc框架spider RPC,并大幅度提升性能。