gpt4 book ai didi

java - 我如何比较在不同的 jvm 上运行的 2 个大对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:49 26 4
gpt4 key购买 nike

我正在考虑改变一些维护大型网站数据的大型对象的重新加载方式,它们包含与目录结构、产品等相关的数据,并且每天都会重新加载。

更改它们的重新加载方式后,我需要能够查看结果数据是否有任何差异,因此目的是重新加载两者并比较内容。

可能存在一些问题(即排序不重要时使用的列表)使比较更加困难,因此我需要能够在比较之前更改结构。我尝试使用 gson 序列化为 json,但内存不足。我正在考虑尝试其他序列化方法或编写我自己的简单序列化方法。

我想这是其他人在改变像这样的关键事情时想要做的事情,但我还没有设法找到任何关于它的迹象。

最佳答案

在这种特殊情况下(单独的 VM),我建议向每个类添加类似 dump 的方法,将相关内容写入文件(人类可读文本)。此方法还会对每个聚合对象调用 dump

最后,您必须从每个 VM 获取文件,然后您可以使用 MD5 校验和等方式比较它们。

这可能需要做很多工作,但如果您遇到任何差异,您可以对两个文件使用 diff,这会有很大帮助。

您可以从一个简单的版本开始,然后通过添加更多输出逐步完善它。

稍后向类添加(完整)序列化是很麻烦的。可能有一些工具可以简化这个(使用反射等),但根据我的经验,你必须调整你的类:排除不相关的字段,为列表定义排序顺序,循环关系等。

实际上我出于同样的原因使用了类似的方法(检查新版本是否仍然返回相同的结果):应用程序包含多个服务(对于每个版本),结果总是数据传输对象,序列化会立即添加到 DTO,DTO 必须提供专门用于此目的的比较方法。

关于java - 我如何比较在不同的 jvm 上运行的 2 个大对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com