【问题标题】:How to serialize/deserialize complex java object quickly如何快速序列化/反序列化复杂的java对象
【发布时间】:2012-09-15 07:31:08
【问题描述】:

我正在调试和修复一个复杂的应用程序,它与一个巨大的 Java 对象 (~250M) 一起工作。

我用另一个程序创建了这个对象。目前我使用 XStream 从硬盘加载和保存这个对象,但解析它需要一分钟多的时间。 它会减慢开发过程。

JAXB 更快吗?还有其他方法可以加载和保存这个巨大的东西吗?

【问题讨论】:

  • 可以使用二进制格式吗?我不希望 JAXB 更快。
  • 我不管它是什么格式...

标签: java xml performance serialization


【解决方案1】:

在这种情况下,我会序列化数据,使其更小更快。您可以将关键类外部化以进一步提高速度。这是我最近进行的一些测试Protobuf vs Thrift vs Java Serialization 它与 kovica 建议的基准相同,但最近在更新的硬件/软件上运行。

如果您需要更快,您可以使用内存映射数据。这很难使用,但你无法击败性能。如果数据已经在磁盘缓存中,您可以加载 250 MB 是几十毫秒。如果不是,您将受到驱动器速度的限制,例如一个缓慢的 40 MB/s 驱动器大约需要 8 秒。

我写的一个使用内存映射文件的库是Java Chronicle

【讨论】:

    【解决方案2】:

    我从未使用过 XStream,但根据他们的文档,它会生成 XML,对吗?您需要将这些对象存储在 XML 中吗? 如果您只需要将对象存储到磁盘,那么您可以使用几种不同的方法:

    • java 序列化/外部化
    • kryo
    • 谷歌原型
    • ...

    请看这里:High performance serialization: Java vs Google Protocol Buffers vs ...?

    【讨论】:

      【解决方案3】:

      我会向其他人推荐 Java 序列化。它可以利用重用堆中的对象(例如:String 的intern() 方法)而不是创建新对象(就像其他序列化程序通常所做的那样)。这减少了有效载荷的总量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多