2

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

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

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

4

3 回答 3

2

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

  • java序列化/外部化
  • 克里奥
  • 谷歌原型
  • ...

也看这里:高性能序列化:Java vs Google Protocol Buffers vs ...?

于 2012-09-15T07:50:18.460 回答
2

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

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

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

于 2012-09-15T08:12:43.883 回答
1

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

于 2012-09-15T08:05:59.207 回答