可变对象导致的诡异现象

2017-01-16  本文已影响0人  小小辉

       当时在做这么一个需求,需要统计一个应用的所有调用信息,包括各个ip的调用信息,整个应用所有的调用信息。流程大概是这样:

1.从一个rest接口读取所有的调用信息,信息包含appName、ip、count等字段。

2.转换为java的对象,每一个对象代表一个ip的调用信息。

3.有一个HashMap存放所有的对象,key值为ip值。

4.有一个特殊的key为:all,代表所有的调用信息。值为list,包含所有ip的对象。

5.聚合all的list对象,计算一个总值。

      问题来了,我当时为了节省内存,性能。采用的合并聚合的方式是把后边的值聚合到list的第一个对象中去。 最后问题的现象是:有一个ip的count和all的count一模一样。因为all和这个ip引用到了同一个对象,而all把这个对象给修改了。

现在想想,jdk把Integer、String等等对象设置为不可变的对象是多么伟大正确的事情。

上一篇 下一篇

猜你喜欢

热点阅读