4

我使用 XStream 作为我的应用程序的一部分来序列化对象。对于其中一个用例,我必须序列化一些实现 Externalizable 接口的对象。对于我的用例,我想使用本机 Java 序列化对它们进行序列化。

我在互联网上找到了一个链接http://old.nabble.com/How-to-remove-Externalizable-Converter-td22747484.html,它帮助我解决了这个问题并开始使用反射转换器来处理可外部化的对象。

在测试应用程序时,我看到应用程序在高并发访问期间在转换器代码中花费了大量时间(10 秒)。我可以看到问题出在FieldDictionary的 buildMap 方法中。

我想知道是否有更好的方法来解决我原来的问题?在具有高并发环境时,反射转换器的性能是否会变差?

提供一些关于环境的额外上下文。它是一个 Web 应用程序,在请求处理期间发生序列化,应用程序可以有 100 个并发线程。

我非常感谢有关此的任何帮助/建议。

4

1 回答 1

0

这在技术上不是一个答案..但我希望它无论如何都会有所帮助。

在创建用于生物分子研究建模的基于 Java Swing 的桌面应用程序时,出于性能原因,我们将非常复杂且相互关联的对象图序列化到磁盘。

即使在解决了 Externalization 和 Serializable 相关问题之后,我们也不得不放弃整个方法并重新开始,因为 Java 序列化对对象结构/名称等非常敏感。这意味着对模型的无辜重构导致了生产中的重大崩溃,当用户尝试加载旧的序列化模型时。

最终我们创建了一个数据存储友好的对象结构(对图中的其他节点没有强相互引用),并将这个结构序列化。这比序列化和反序列化原始图更简单、更不容易出错并且更快。这也意味着我们可以随意重构/修改我们的域图对象,只要适配器(将域对象转换为数据存储对象的组件)保持正确更新。

于 2013-04-19T11:12:53.870 回答