Lombok @Builder - 对性能有好处吗?
Lombok @Builder - is good for performance?
我不确定是否应该使用 Lombok 的 @Builder
,因为在我看来 @Builder
创建了 类.
的两个实例
myClassNameBuilder = MyClassName.builder(); // create ClassNameBuilder instance
myClassNameBuilder.build(); // create ClassName instance but ClassNameBuilder instance still exists in memory.
我认为这对性能不利,因为垃圾收集器和 JIT 必须处理 ClassNameBuilder 的所有实例。
我的问题:什么时候应该使用@Builder
?
一般情况下,不要进行优化,除非您确切地知道您遇到了性能问题以及出现问题的原因。
是否使用构建器模式的决定应该基于一个方面:它是否提高了代码质量(即可维护性、可读性等)?
如果您稍后发现它会导致性能问题(这不太可能),您仍然可以找到解决方案,甚至可能保留构建器模式。
不太可能导致问题的原因有以下几个:
- 一般来说,对于在使用后根本没有被引用的对象,GC 的速度非常快,构建器实例通常就是这种情况。
- 如果对象仅在单个堆栈框架中使用(即它们不会传递给其他方法或作为 return 值),分配和 GC 会更快(如果需要,请搜索“逃逸分析”了解详情)。很多时候builder都是这样使用的
- JIT 编译也可以忽略不计,因为它是每个运行时任务一次,而且构建器代码很简单,因为它主要由简单的设置器和实例变量组成。
我不确定是否应该使用 Lombok 的 @Builder
,因为在我看来 @Builder
创建了 类.
myClassNameBuilder = MyClassName.builder(); // create ClassNameBuilder instance
myClassNameBuilder.build(); // create ClassName instance but ClassNameBuilder instance still exists in memory.
我认为这对性能不利,因为垃圾收集器和 JIT 必须处理 ClassNameBuilder 的所有实例。
我的问题:什么时候应该使用@Builder
?
一般情况下,不要进行优化,除非您确切地知道您遇到了性能问题以及出现问题的原因。
是否使用构建器模式的决定应该基于一个方面:它是否提高了代码质量(即可维护性、可读性等)? 如果您稍后发现它会导致性能问题(这不太可能),您仍然可以找到解决方案,甚至可能保留构建器模式。
不太可能导致问题的原因有以下几个:
- 一般来说,对于在使用后根本没有被引用的对象,GC 的速度非常快,构建器实例通常就是这种情况。
- 如果对象仅在单个堆栈框架中使用(即它们不会传递给其他方法或作为 return 值),分配和 GC 会更快(如果需要,请搜索“逃逸分析”了解详情)。很多时候builder都是这样使用的
- JIT 编译也可以忽略不计,因为它是每个运行时任务一次,而且构建器代码很简单,因为它主要由简单的设置器和实例变量组成。