我使用XStream作为序列化对象的应用程序的一部分。对于其中一个用例,我必须序列化一些实现Externalizable接口的对象。对于我的用例,我想使用本机Java序列化来序列化它们。
我在互联网上找到了一个链接,http://old.nabble.com/How-to-remove-Externalizable-Converter-td22747484.html,它帮助我解决了这个问题,并开始使用可外部化对象的反射转换器。
在测试应用程序时,我发现在高并发访问期间,应用程序在转换器代码上花费了大量时间(10秒)。我可以看到问题出在FieldDictionary的buildMap方法中。
我想知道是否有更好的方法来解决我最初的问题?当具有高并发环境时,反射转换器的性能预计会变差吗?
给出一些关于环境的附加上下文。它是一个web应用程序,序列化发生在请求处理过程中,应用程序可以有100个并发线程。
我真的很感谢在这方面的任何帮助/建议。
发布于 2013-04-19 19:12:54
从技术上讲,这不是一个答案..但我希望不管怎样,它都能有所帮助。
在创建用于生物分子研究建模的基于Java Swing的桌面应用程序时,出于性能原因,我们将非常复杂且互连的对象图序列化到磁盘。
即使在解决了外部化和序列化相关的问题之后,我们也不得不放弃整个方法,重新开始,因为Java序列化对对象结构/名称等非常敏感。这意味着,当用户试图加载旧的序列化模型时,对模型的无害重构会导致生产中的重大崩溃。
最终,我们创建了一个数据存储友好的对象结构(没有对图中其他节点的强相互引用),并对该结构进行了序列化。这比序列化和反序列化原始图形简单得多,不易出错,速度也快得多。这也意味着我们可以随意重构/修改我们的域图对象,只要适配器(将域对象转换为DataStore对象的组件)保持正确更新即可。
https://stackoverflow.com/questions/12256027
复制相似问题