MVEL 与反射。关于对象成员访问通常更快?

Posted

技术标签:

【中文标题】MVEL 与反射。关于对象成员访问通常更快?【英文标题】:MVEL vs reflection. What is generally faster regarding object member access? 【发布时间】:2016-09-22 21:20:26 【问题描述】:

关于对象成员访问,什么通常更快? 1.执行编译好的mvel表达式 2.执行缓存反射方法

【问题讨论】:

【参考方案1】:
Records From Json From Dto To Dto
With Getter/Setter 7,335,792.22 1,130,815.56 1,239,896.67
10 49,263.33 16,240.00 13,446.67
1000 392,000.00 93,250.00 84,123.33
100000 21,566,113.33 3,282,956.67 3,622,120.00
With Reflection 26,754,304.44 15,027,837.78 15,356,792.22
10 136,566.67 63,640.00 52,193.33
1000 1,294,553.33 618,830.00 542,986.67
100000 78,831,793.33 44,401,043.33 45,475,196.67
With Mvel 36,520,687.78 50,511,424.44 50,790,170.00
10 5,707,033.33 515,293.33 463,266.67
1000 1,535,563.33 1,850,083.33 1,838,030.00
100000 102,319,466.67 149,168,896.67 150,069,213.33

下图显示了对应于一个小测试代码的统计数据,该代码测量了访问 POJO 成员的三种不同方法的性能。

    使用 Getter/Setter 带反射 使用 Mvel 编译表达式

对于每种方法,有三个记录集,即 10 条记录、1000 条记录和 100,000 条记录。每个记录集执行 30 次,相关测量以纳秒为单位取平均值。

【讨论】:

介意分享测试代码吗?你用 JMH 吗? 将设置一个 github 存储库以共享相关代码,但总的来说,以上统计数据回答了您的问题

以上是关于MVEL 与反射。关于对象成员访问通常更快?的主要内容,如果未能解决你的问题,请参考以下文章

通过反射访问父类的私有成员

既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么?

关于何时在私有成员变量上实现访问器而不是将它们公开的实践

反射与正则表达式

如何通过反射访问私有方法和私有数据成员?

Java新手入门200例118之Java通过反射访问成员变量