Java:深拷贝的序列化性能?

标签 java performance serialization cloning

我需要为我的一个项目深度复制 Java 对象;我想知道是否可以为此使用序列化。

对象相当小(每个 < 1kb),每个副本的 #objects 总数将 < 500,复制例程将每天调用几次。在这种情况下,在生产中使用序列化是否可以,或者考虑到序列化的性能,这仍然是一个非常糟糕的主意吗?

如果这仍然不是一个好主意,我可以考虑为每个此类使用复制构造函数/静态复制方法来提高性能。还有其他方法吗?

最佳答案

也许吧。性能不会成为问题 - 依赖性会成为问题。

序列化的常见问题是,对应用程序中某个核心类的无辜引用可以为您提供所有生命实例的 90% 的副本,因为它们突然变得可访问。所以你必须非常小心 transient 和你使用的引用。

更糟糕的是,如果您需要序列化以进行深度复制和真实状态保存,您最终可能会遇到不兼容的目标:

  • 深拷贝需要快速
  • 深拷贝可以处理开放资源(数据库连接)
  • 状态保存需要处理 API 演化(状态存储在磁盘上,可以使用新版本的代码恢复)。
  • 状态保存可以从使用可读形式中获益(这样人类就可以修复错误)

因此,通常最好使用 copy constructors而不是使用“聪明的 hack”,即使它现在可能会保护您一些/很多时间。

关于Java:深拷贝的序列化性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580784/

相关文章:

java - 流式写Json

java - 为什么这会返回 Infinity? ( java )

Android 模拟器在 Linux 上超慢

IOS App内存使用标准

c# - 如何分析二进制序列化流的内容?

c# - XML 序列化和需要公共(public)属性

c# - 通过 Web 服务序列化自定义对象中的名称/值对

java - JavaFX TableView 中的重复列

java - 如何在 JAVA GUI 中创建类似于 Google 搜索样式的搜索栏

python - 具有不同和依赖步骤的嵌套循环