Fork me on GitHub

Java对象复制类库性能对比

Published on:

背景

在开发中我们经常会用到对象之间的互相拷贝,Java中对象拷贝的类库也比较多,常见的有Spring BeanUtilsApache BeanUtils,等并且在很多大厂公司对对象拷贝也有详尽的说明,避免大家踩坑。

功能对比

耗时(毫秒) 1000次 10,000次 100,100次
Apache BeanUtils 298 983 4211
Cglib BeanCopier 89 120 203
Spring BeanUtils 92 160 524

性能对比

Apache BeanUtils Cglib BeanCopier Spring BeanUtils
非public类 不支持 支持 支持
基本类型与装箱类型,int->Integer,Integer->int 支持,可以copy 不支持,不copy 不支持,不copy
int->long,long->int,int->Long,Integer->long 不支持 不支持 不支持
源对象相同属性无get方法 不支持 不copy 不支持 不copy 不支持 不copy
目标对象相同属性无get方法 支持 不支持 支持
目标对象相同属性无set方法 不copy,不报错 报错 不copy,不报错
源对象相同属性无set方法 支持 支持 支持
目标对象相同属性set方法返回非void 不设置,其他正常属性可以copy 不设置,导致其他属性都无法copy 支持,能够copy
目标对象多字段 支持 支持 支持
目标对象少字段 支持 支持 支持

结论

从性能对比来看:

  1. cglibBeanCopier最好, Spring BeanUtils稍微差点,但也还可以,Apache BeanUtils性能最差
  2. 从功能对比来看,cglib 在set方法返回非void时,会导致其他属性无法copy,目标没有set方法时,会报错,还存在并且有多项不支持的情况

Comments