Java Bean Copy 性能大比拼

简介: Java Bean Copy 性能大比拼简介Bean 拷贝在工作中被大量使用,可以大幅度的提高工作量。本文对常用的 Bean copy 工具进行了压力测试,方便大家选择更加适合自己的工具。本篇文章是mica cglib 增强——【01】cglib bean copy 介绍 续篇,该专栏会持续更新,感兴趣的朋友请订阅我们。

Java Bean Copy 性能大比拼

简介

Bean 拷贝在工作中被大量使用,可以大幅度的提高工作量。本文对常用的 Bean copy 工具进行了压力测试,方便大家选择更加适合自己的工具。本篇文章是mica cglib 增强——【01】cglib bean copy 介绍 续篇,该专栏会持续更新,感兴趣的朋友请订阅我们。

bean 拷贝工具

模型

无类型转换

/**
 * 来源用户
 *
 * @author L.cm
 */
@Data
public class FormUser {
    private Long id;
    private String nickName;
    private Integer age;
    private String phone;
    private String email;
    private String password;
    private Integer gender;
    private String avatar;
}

/**
 * 转换的用户
 *
 * @author L.cm
 */
@Data
public class ToUser {
    private String nickName;
    private String phone;
    private String email;
    private Integer gender;
    private String avatar;
}

带类型转换

/**
 * 附带类型转换的 用户模型
 *
 * @author L.cm
 */
@Data
@Accessors(chain = true)
public class FormConvertUser {
    private Long id;
    private String nickName;
    private Integer age;
    private String phone;
    private String email;
    private String password;
    private Integer gender;
    private String avatar;
    @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
    private LocalDateTime birthday;
}

/**
 * 附带类型转换的 用户模型
 *
 * @author L.cm
 */
@Data
@Accessors(chain = true)
public class ToConvertUser {
    private String nickName;
    private Integer age;
    private String phone;
    private String email;
    private String password;
    private Integer gender;
    private String avatar;
    private String birthday;
}

Bean copy 压测结果

环境

  • OS: macOS Mojave
  • CPU: 2.8 GHz Intel Core i5
  • RAM: 8 GB 1600 MHz DDR3
  • JVM: Oracle 1.8.0_201 64 bits

简单模型

Benchmark Mode Cnt Score Error Units
hutoolBeanCopy thrpt 5 1939.092 ± 26.747 ops/ms
springBeanCopy thrpt 5 3569.035 ± 39.607 ops/ms
cglibBeanCopy thrpt 5 9112.785 ± 560.503 ops/ms
micaBeanCopy thrpt 5 17753.409 ± 393.245 ops/ms
yangtu222BeanCopy thrpt 5 18201.997 ± 119.189 ops/ms
cglibMapperBeanCopy thrpt 5 37679.510 ± 3544.624 ops/ms
mapStructBeanCopy thrpt 5 50328.045 ± 529.707 ops/ms
selmaBeanCopy thrpt 5 200859.561 ± 2370.531 ops/ms

附带类型转换(日期)

Benchmark Mode Cnt Score Error Units
micaBeanCopy thrpt 5 1186.375 ± 64.686 ops/ms
mapStructBeanCopy thrpt 5 1623.478 ± 13.894 ops/ms
selmaBeanCopy thrpt 5 160020.595 ± 2570.747 ops/ms

列表模型(100 item)

Benchmark Mode Cnt Score Error Units
springBeanCopy thrpt 5 35.974 ± 0.555 ops/ms
micaBeanCopy thrpt 5 169.066 ± 5.460 ops/ms

Map 拷贝到 bean

Benchmark Mode Cnt Score Error Units
hutoolBeanCopy thrpt 5 1338.551 ± 16.746 ops/ms
micaBeanCopy thrpt 5 13577.056 ± 27.795 ops/ms

结论

java-object-mapper-benchmark 测试结果有些出入。

Selma 的表现反而比 MapStruct 更好,可能是模型不一样导致的。

功能比较

工具包 需要编写Mapper 支持Map 支持List、Set 类型转换 性能
Selma 需要手写转换 极高
MapStruct 支持常用类型和复杂表达式 极高
BeanUtils(yangtu222) 需要手写转换 极高
mica 是用 Spring 的类型转换 极高
Spring 不支持
hutool 不支持

链接

本项目源码:https://github.com/lets-mica/mica-jmh

开源推荐

关注我们

如梦技术-公众号.jpg

扫描上面二维码,更多精彩内容每天推荐!

目录
相关文章
|
21天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第30天】 随着Kotlin成为开发Android应用的首选语言,开发者社区对于其性能表现持续关注。本文通过深入分析与基准测试,探讨Kotlin与Java在Android平台上的性能差异,揭示两种语言在编译效率、运行时性能和内存消耗方面的具体表现,并提供优化建议。我们的目标是为Android开发者提供科学依据,帮助他们在项目实践中做出明智的编程语言选择。
|
1月前
|
安全 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第24天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin在Android开发中的普及,了解其与Java在性能方面的差异变得尤为重要。本文通过深入分析和对比两种语言的运行效率、启动时间、内存消耗等关键指标,揭示了Kotlin在实际项目中可能带来的性能影响,并提供了针对性的优化建议。
30 0
|
1月前
|
安全 Java Android开发
构建高效安卓应用:探究Kotlin与Java的性能对比
【2月更文挑战第22天】 在移动开发的世界中,性能优化一直是开发者们追求的关键目标。随着Kotlin在安卓开发中的普及,许多团队面临是否采用Kotlin替代Java的决策。本文将深入探讨Kotlin和Java在安卓平台上的性能差异,通过实证分析和基准测试,揭示两种语言在编译效率、运行时性能以及内存占用方面的表现。我们还将讨论Kotlin的一些高级特性如何为性能优化提供新的可能性。
66 0
|
1月前
|
安全 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第18天】 在Android开发领域,Kotlin和Java一直是热门的编程语言选择。尽管两者在功能上具有相似性,但它们在性能表现上的差异却鲜有深入比较。本文通过一系列基准测试,对比了Kotlin与Java在Android平台上的运行效率,揭示了两种语言在处理速度、内存分配以及电池消耗方面的差异。此外,文章还将探讨如何根据性能测试结果,为开发者提供在实际应用开发中选择合适语言的建议。
|
29天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第24天】 在移动开发领域,性能优化一直是开发者关注的重点。随着Kotlin的兴起,许多Android开发者开始从传统的Java转向Kotlin进行应用开发。本文将深入探讨Kotlin与Java在Android平台上的性能表现,通过对比分析两者在编译效率、运行时性能和内存消耗等方面的差异。我们将基于实际案例研究,为开发者提供选择合适开发语言的数据支持,并分享一些提升应用性能的最佳实践。
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第22天】随着Kotlin在Android开发中的普及,开发者们对其性能表现持续关注。本文通过深入分析Kotlin与Java在Android平台上的执行效率,揭示了二者在编译优化、运行时性能以及内存占用方面的差异。通过实际案例测试,为开发者提供选择合适编程语言的参考依据。
|
9天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
12天前
|
存储 Java 测试技术
Java 21革命性升级:探索分代ZGC的性能奇迹
Java 21革命性升级:探索分代ZGC的性能奇迹
14 0