10

与仅使用构造函数创建对象相比,内存和性能使用情况如何?

这里的用法是创建一个Set<Object>List<Object>可能包含数百万以上的条目,我担心使用 Bloch 的 Builder 模式的开销。我过去曾使用过它,但从未在这么大的范围内使用过。

参考:第 2 项:在面对许多构造函数参数时考虑构建器,转载于创建和销毁 Java 对象:第 1 部分,摘自Joshua Bloch 的Effective Java Second Edition

4

3 回答 3

7

您有额外的 Builder-object,它在创建对象后被丢弃。所以你可能会对内存使用和速度产生一些影响。但是Java-VM确实优化得很厉害,尤其是Server-VM(java -server),所以VM可以完全优化掉builder。所以我的建议是你应该衡量真正的影响(如果你关心性能的话)并确定影响是否太大。

于 2010-03-15T16:13:28.400 回答
3

从您最初的描述中很难分辨,但是如果您担心将Collection<Object>具有约百万个条目的 a 传递给构造函数而不是传递给 Builder,那么一个额外(短期)对象的成本几乎不值得讨论。

于 2010-03-15T16:14:19.460 回答
1

成本可以忽略不计,因为可以在构建对象后立即对构建器引用进行垃圾收集。

在任何情况下,创建 1m 额外对象的影响应该在 10s 以下。

于 2010-03-15T20:07:45.553 回答