『十倍程序员』Java五大对象映射框架性能比拼

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」。

1.前言

Hello 大家好,我是l拉不拉米,在上一篇文章《Java五大对象映射框架,总有一款适合你😘》中,给大家分享Java五大映射框架的介绍以及简单使用,今天我们以性能为指标,来给这5个对象映射框架较个高低。

  1. 测试模型

为了能够正确地测试映射,我们需要有源模型目标模型。我们创建了两个测试模型。

第一个只是一个带有一个 String 字段的简单 POJO,这允许我们在更简单的情况下比较框架,并检查如果我们使用更复杂的 bean 是否有任何变化。

简单的源模型如下所示:

1
2
3
4
java复制代码public class SourceCode { 
String code;
// getter and setter
}

目标模型如下:

1
2
3
4
java复制代码public class DestinationCode { 
String code;
// getter and setter
}

源 bean 的真实示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
java复制代码public class SourceOrder { 
private String orderFinishDate;
private PaymentType paymentType;
private Discount discount;
private DeliveryData deliveryData;
private User orderingUser;
private List<Product> orderedProducts;
private Shop offeringShop;
private int orderId;
private OrderStatus status;
private LocalDate orderDate;
// getters and setters
}

目标类如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
java复制代码public class Order { 
private User orderingUser;
private List<Product> orderedProducts;
private OrderStatus orderStatus;
private LocalDate orderDate;
private LocalDate orderFinishDate;
private PaymentType paymentType;
private Discount discount;
private int shopId;
private DeliveryData deliveryData;
private Shop offeringShop;
// getters and setters
}

3.测试结果

使用Java基准测试神器 – JMH(Java Microbenchmark Harness)作为测试工具。

我们为每个转换器创建了一个单独的基准,将 BenchmarkMode 指定为 Mode.All

3.1.平均时间

JMH 返回了以下平均运行时间的结果(越少越好):

框架名称 平均运行时间 (单位:ms)
MapStruct 10 -5
JMapper 10 -5
Orika 0.001
ModelMapper 0.001
Dozer 0.002

该基准明显地显示了MapStructJMapper都有最好的平均工作时间。

3.2.吞吐量

在此模式下,该基准测试返回每秒的操作数。我们收到以下结果(更多更好):

框架名称 吞吐量 (每毫秒操作次数)
MapStruct 133719
JMapper 106978
Orika 1800
ModelMapper 978
Dozer 471

在吞吐量模式下,MapStruct是框架测试中最快的,JMapper次之。

3.3.单发时间

此模式允许测量从它开始到结束的单个操作的时间。该基准得到以下结果(更少更好):

框架名称 单发时间 (每操作毫秒数)
JMapper 0.015
MapStruct 0.450
Dozer 2.094
Orika 2.898
ModelMapper 4.837

我们看到JMapperMapStruct返回更好的结果。

3.4.采样时间

此模式允许对每个操作的时间进行采样。三种不同百分位数的结果如下:

采样时间 (单位:ms)
框架名称 p0.90 p0.999 p1.0
JMapper 10-4 0.001 2.6
MapStruct 10-4 0.001 3
Orika 0.001 0.010 4
ModelMapper 0.002 0.015 3.2
Dozer 0.003 0.021 25

所有基准测试都显示,MapstructJMapper根据场景不同都是个好选择。

4.结论

通过简单的理想环境下的测试结果,我们可以得出MapstructJMapper性能较接近,但是Mapstruct易用性更强,JMapper更小众,因此,笔者更加推荐使用Mapstruct

其他三种框架表现和前两名的差距较大,不做推荐。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%