4

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

  1. 在性能方面,通过循环 alist或使用序列化进行深度复制有什么更好的?我读过一篇文章(对不起,我失去了链接)说循环比 java 序列化好 4 倍。这是否意味着使用像 Kryo 这样的 3rd 方可以比循环更好?

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

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

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

4

1 回答 1

0
  1. 循环总是比序列化快,除非你只是序列化原语。
  2. 在第三方库中,它们通常处理子类和各种类型。他们通过使用 sun.misc.Unsafe.class 来做到这一点
  3. 是的,实际上您可以使用 Unsafe 类复制内存。检查不安全的类实现。
  4. 你可以拥有 MyTools 或者让我们说 Utils 类为你做这件事。

根据您的需要,列表、地图和其他泛型无法进行深度复制。出于这个原因,您最终可能会使用像 Kryo 这样的优秀序列化库。

于 2013-10-21T12:19:21.643 回答