【问题标题】:Which is faster: Cloning or using Streams?哪个更快:克隆还是使用 Streams?
【发布时间】:2010-06-02 14:52:14
【问题描述】:

在 Java 中,速度更快:

  • 克隆一个对象,然后将其传递给多个侦听器,假设克隆的对象不包含比嵌套数组、基元和字符串更复杂的内容
  • 使用 Streams 将数据从一个对象传递到另一个对象?

【问题讨论】:

  • 如果您绝对需要知道哪个更快,请测量。但如果你只需要“足够好”,那就选择一个可能更快的(克隆,见下文),看看它是否足够快。

标签: java performance stream cloning


【解决方案1】:

我猜克隆会更快,因为:

当您克隆时,您通过实例化另一个对象及其属性来创建另一个对象。 当您使用流时,您序列化一个对象并反序列化它(而 Java 还必须创建该对象的一个​​实例)。因此,当您使用流时,您有序列化对象的开销。

当然,clone() 的实现不应该做一些不寻常的事情,这会增加复制对象的时间。用数组、原语和字符串克隆对象不应该消耗太多时间。

【讨论】:

  • 你说得对,我们在使用流时遇到了主要的性能问题。平台无法处理序列化的压力;背景中有太多的反射。总的来说,我们发现最快的实现是克隆。
【解决方案2】:

假设 clone() 的实现是合理的,克隆会更快。

如果你仔细想想,这是因为 clone() 是一个高度专业化的函数,它只做一件事:创建对象的副本。因此它不需要担心太多开销 - 通常它所做的只是逐个字段复制到一个新的对象实例。

但是让你的对象不可变并且再也不用担心克隆实例会更快:-)

【讨论】:

  • 附注clone() 通常也会受益于只做嵌套不可变对象的浅拷贝,例如字符串。基于流的方法通常必须完整地重构这些对象。
猜你喜欢
  • 2013-10-11
  • 2012-02-29
  • 1970-01-01
  • 2014-05-16
  • 2011-03-26
  • 2012-06-12
  • 2010-09-29
  • 2011-03-14
  • 2012-07-15
相关资源
最近更新 更多