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