之前写过一篇文章,说我的项目由于使用了的BeanUtils.copyProperties,在数据量很大的情况下,我的日志文件记录了大量这些复制属性的相关信息,导致服务器内存占用率高达97%。这两天我做的一个功能,也使用到了它,依然是大数据量,功能需要几分钟才能完成。我看了一下日志文件以及通过debug观察耗时的节点。果然又是因为BeanUtils.copyProperties。查了一下度娘,我了解到这玩意之所以会记录大量的信息到日志文件,是因为它使用了转换器,这个转换器会把把转换的过程什么的记录到日志。一个对象有25个属性。日志里就有25条转换记录。那么1万的对象呢?日志就得要记录25万条记录,想想这是有多可怕。而且在大数据量的情况下,它的性能就会很低。。。
为啥Apache的BeanUtils的性能会差?
首先它底层是用了反射进行复制的,而且它还会打印大量日志,做各种转换,类型的判断。。。你不慢谁慢?其实Spring的BeanUtils也是使用的反射进行复制,只不过人家不会打印日志和做一些类型的判断,就会稍微比apache的快一些。
后来,我选择了使用cglib的BeanCopier
这个性能会比BeanUtils快很多
【参考】
参考这篇文章
https://blog.csdn.net/zengfanwei1990/article/details/107246689