Java 对象映射框架性能基准测试:九款框架横向对比
2026/7/8 13:54:34 网站建设 项目流程

文章目录

  • Java 对象映射框架性能基准测试:九款框架横向对比
    • 1、 这个项目解决什么问题
    • 2、 覆盖了哪些框架
    • 3、 测试环境和数据模型
    • 4、 跑出来的分数
    • 5、 怎么复现
    • 6、 这个仓库的价值在哪
    • 7、 一点提醒

Java 对象映射框架性能基准测试:九款框架横向对比

arey/java-object-mapper-benchmark 已经拿到 285 Star,规模不大,但里面装的东西挺实在。

它做的事情很专一,用 JMH 把常见的 Java 对象映射框架拉到一起做了一次跑分对比,跑出来的数据能让做架构选型的人少绕几道弯。

1、 这个项目解决什么问题

分层应用里 DTO 和实体之间来回拷贝是个体力活,字段多了容易写错,维护成本也高。社区里陆续出现了一堆映射框架,思路大致分两类,一类靠反射在运行时拿元数据,另一类靠编译期代码生成旁路掉反射开销。

两类方案到底差多少,光看 README 里的宣传很难形成直觉。这个项目就是把 9 个框架拉到同一台机器、同一份数据模型下,用 JMH 跑 throughput,给出 ops/s 数字让结果可比对。

2、 覆盖了哪些框架

仓库列出的受测框架有 10 个,包括 Dozer、MapStruct、ModelMapper、Selma、Orika、JMapper、BULL、datus、ReMap 和 SJF4J。

按思路归类的话,MapStruct、Selma 依赖编译期代码生成,运行时和手写代码接近;Dozer、ModelMapper、Orika 走反射,灵活但有反射开销;JMapper、datus、ReMap 介于两者之间;SJF4J 是后加入的轻量方案。

3、 测试环境和数据模型

机器配置信息点一下:macOS Tahoe 26.5,Apple M4 Pro,24 GB 内存,Eclipse Temurin 21.0.5+11。

数据模型基础但够用,来自 ModelMapper 项目里一个叫 Comparison 的测试类,覆盖了 Java Bean 里的对象类型和集合两类常见组合,仓库里附了一张 UML 图方便看结构。

4、 跑出来的分数

直接看 results.png 是最快的,仓库里维护了这张图。

把表格关键行抽出来看分层:

第一档是 Manual、SJF4J、MapStruct、Selma,每秒 9200 万到 9800 万 ops,和手写拷贝基本同档,差距都在几个百分点内。

第二档是 JMapper,8300 万 ops 左右,编译期增强带一点额外开销但还能打。

第三档是 datus 和 Orika,3300 万和 1500 万 ops,差距开始拉开。

第四档是 ReMap、ModelMapper、BULL、Dozer,从 200 万掉到 33 万,相比第一档差出两个数量级。Dozer 垫底,33 万 ops/s。

这个分布反映出,是不是走编译期代码生成,几乎是决定性的。反射类框架在 throughput 场景下要付出两个数量级的代价。

5、 怎么复现

克隆仓库后跑:

mvn cleaninstalljava@jvm.options-jartarget/benchmarks.jar

只想跑单个框架,加参数指定:

java@jvm.options-jartarget/benchmarks.jar-ptype=MapStruct

想要 CSV 结果做二次分析:

java@jvm.options-jartarget/benchmarks.jar-rffresults.csv-rfcsv gnuplot benchmark.plt

前置依赖是 Maven 3.x 和 JDK 17 及以上。

6、 这个仓库的价值在哪

它本身没打算给你一个新框架用,目的是给一份可复现的对比数据。选型的时候缺的就是这种横向跑分,单框架 README 里的 benchmark 都挑自己最顺眼的角度写,横向对比少且容易过时。

285 Star 的体量也说明它服务的是细分人群:做 Java 后端架构的人、维护老系统在 Dozer 上挣扎想找替代品的人、好奇 MapStruct 为什么被反复推荐的人。

仓库本身鼓励贡献,加新 mapper 只要继承 AbstractMapperTest 写个单测,再在 MapperBenchmark 里登记一下,PR 过去就行。维护者对社区接入是开放态度。

7、 一点提醒

跑分高不等于适用。MapStruct 这类编译期框架需要声明映射接口,灵活度比不上反射框架,碰到字段动态变化的场景反而麻烦。ModelMapper 当年流行是因为装配成本低,不写接口就能跑,新项目里再用它就要看吞吐要求受不受得了那个数字。

基准测试是工具不是结论,拿来看趋势可以,拿来做选型还要叠项目自身的约束进来。

为装配成本低,不写接口就能跑,新项目里再用它就要看吞吐要求受不受得了那个数字。

基准测试是工具不是结论,拿来看趋势可以,拿来做选型还要叠项目自身的约束进来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询