关于深层复制和序列化

时间:2013-04-19 10:54:52

标签: java performance serialization deep-copy

我已经阅读了很多关于Java ListMap等深度复制和序列化的内容,但我没有找到一些问题的好答案。我关心时间和表现,所以我正在寻求妥协。我在下面列出我的问题,以便您可以解决有答案的问题。

  1. 通过循环list或使用序列化,在性能,深度复制方面有什么好处?我读过一篇帖子(抱歉,我丢失了链接),说循环比java序列化好4倍。这是否意味着使用像Kryo这样的第三方可能比循环更好?

  2. 我不确定序列化在不同的3rd party libraries中是如何工作的,但是如果我有很多子类级别会发生什么,序列化会比循环更好吗?

  3. Java中有没有复制原始内存的库?例如,在memcopy()中使用C类似函数的库。这样会快得多,因为不需要关心类逻辑(当然它需要对非连续内存数据进行一些处理)。我知道Java是面向对象的:),但这不违反我认为的规则。

  4. 如果我想在Java中实现deepCopy(List<?>)deepCopy(Map<?,?>),我可以将它们放在我拥有的MyTools课程中吗?或者在Java中有一些更简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

  1. 除非您只是序列化基元,否则循环将始终比序列化更快。
  2. 在第三方库中,它们通常处理子类和各种类型。他们通过使用sun.misc.Unsafe.class
  3. 来做到这一点
  4. 是的,实际上您可以使用Unsafe类复制内存。检查Unsafe类实现。
  5. 您可以拥有MyTools,或者让我们说Utils类为您做到这一点。
  6. 根据您的需要,无法对列表,地图和其他仿制品进行深度复制。因此,您最终可能会使用像Kryo这样的良好序列化库。