Java 与手动声明相比,创建对象lombok builder的更快方法
在这三种创建对象的方法之间,哪一种执行速度更快Java 与手动声明相比,创建对象lombok builder的更快方法,java,lombok,Java,Lombok,在这三种创建对象的方法之间,哪一种执行速度更快 Amount.builder().categoryCode("A").coveredAmount(new BigDecimal(100)).build(); 或 或 字段的数量也会有所不同吗?让我们评估一下每种语法有多少堆栈帧(请原谅我的简短,只是一个粗略的图表): 总共有6个函数调用 2) ctr call -> return Amount -> setter -> bigdecimal -> return bigde
Amount.builder().categoryCode("A").coveredAmount(new
BigDecimal(100)).build();
或
或
字段的数量也会有所不同吗?让我们评估一下每种语法有多少堆栈帧(请原谅我的简短,只是一个粗略的图表): 总共有6个函数调用
2) ctr call -> return Amount -> setter -> bigdecimal -> return bigdecimal -> return setter -> (same again as last step)
总共5个电话
For 3) only 2 function calls
通过以上分析,第三个语法获胜,但您的编译器可能会以这样的方式进行优化,使这三个语法都具有相似的执行时间。除了性能比较(peanuts btw…)之外,您不应基于其执行时间使用对象创建策略,而应仅基于您的实际需要、要求和最佳实践
Fluent生成器模式
- 更好的可读性
- 可选属性
- 分步施工
备注
:不要使用此模式来隐藏您的类定义了太多字段的事实。。。使用类似于extract class
的模式,而不是通过构建器构造
Javabean样式
。这种类型的构造(IMO)是一种糟糕的做法,因为从无参数构造到调用setter初始化它之间的时间间隔,对象仍然处于不一致的状态主构造函数
。当所有字段都是必填项时,您更喜欢这种方式
287/5000谢谢你的回复,当你说编译器可以在所有三种情况下进行优化,那么编译器会在这三种情况下进行不同的优化吗?还是同一个优化过程?如果是不同的,您是否有文章链接可以解释这一点?您可以在这里阅读更多关于jdk代码优化的内容,但对于lombok,我没有任何参考资料,jit可能无法对其进行优化。您不应该在这一级别开始优化,除非您知道此时存在性能问题。选择最容易理解的方式。
1) builder() ->returns -> categoryCode() -> return this -> coveredAmount() -> return this
-> new BigDecimal() -> return BigDecimal -> return this -> finally build() -> returns Amount
2) ctr call -> return Amount -> setter -> bigdecimal -> return bigdecimal -> return setter -> (same again as last step)
For 3) only 2 function calls