当前位置: 首页 > 面试题库 >

Java对象序列化性能技巧

董良策
2023-03-14
问题内容

我必须将一棵巨大的对象树(7,000)序列化到磁盘中。最初,我们将这棵树保存在Kodo的数据库中,但是它将花费数以千计的查询将该树加载到内存中,并且将占用本地Universe可用时间的很大一部分。

我为此尝试了序列化,的确可以提高性能。但是,我觉得可以通过编写自己的自定义序列化代码来改善这一点。我需要尽可能快地加载此序列化对象。

在我的机器上,序列化/反序列化这些对象大约需要15秒。从数据库加载它们时,大约需要40秒钟。

考虑到由于对象在树中,它们相互引用,因此我有什么技巧可以提高性能呢?


问题答案:

一种优化是自定义类描述符,以便将类描述符存储在其他数据库中,并且在对象流中仅通过ID引用它们。这减少了序列化数据所需的空间。例如,请参见类SerialUtil和ClassesTable在一个项目中的工作方式。

将类设置为可外部化而不是可序列化可带来一些性能优势。缺点是它需要大量的手工工作。

然后还有其他序列化库,例如jserial,它可以提供比Java默认序列化更好的性能。另外,如果对象图不包含循环,则可以更快地对其进行序列化,因为序列化程序不需要跟踪所看到的对象(请参阅jserial的FAQ中的
“它是如何工作的?” )。



 类似资料:
  • 本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化        将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化

  • 问题内容: 什么之间的区别,并在上课吗?关于差异,我似乎找不到太多信息。 问题答案: 调用默认的反序列化机制,并在类上定义方法时使用。换句话说,当您具有自定义反序列化逻辑时,您仍然可以返回默认的序列化,这将对您的非静态,​​非瞬态字段进行反序列化。例如: 另一方面,当您在反序列化的对象的外部创建并想要读取先前已序列化的对象时,将使用:

  • 我想将这个对象序列化为JSON字符串 并得到如下结果: 我试着用 但不是这样,我得到了: 个性化序列化: 欢迎提出任何建议 谢谢,马里奥

  • 错误: java.lang.ClassNotFoundException:testprocedure.tp$3在java.net.URLClassLoader$1上运行(未知源)在java.net.URLClassLoader上运行(未知源)在java.security.accessController.doprivileged(本机方法)在java.net.URLClassLoader.find

  • 本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列

  • 我该怎么做才能使这件事如我所愿?。谢谢 JSON对象示例列表 示例JSON对象: null 忽略不存在json字段的反序列化错误,但问题仍然存在。 示例:对象反序列化器