误用ArrayListMultimap引发的问题
最近生产环境的系统在运行一段时间后,用户登录速度越来越慢,但是重启某一模块后,用户登录恢复正常。如此反复,令人提心吊胆。于是下定决心,找出问题原因。
趁着系统运行低峰期,打印出相应Dump文件,发现Dump文件中在ArrayListMultimap对象处包含大量HashMap$Entry,由于涉及信息安全,在这里就不粘贴其对应的Dump数据了。分析存在问题的代码发现原作者引用了如下数据结构:
Multimap<Long,Long> syncMap = ArrayListMultimap.create();
但是根据原代码的业务逻辑,此处的(key,value )应当是不允许重复的。基于此分析,基本可以确定此处为对象误用:将HashMultimap误用为ArrayListMultimap.
那么ArrayListMultimap与HashMultimap在对象去重上有啥区别呢?下面以示例来进行说明:
一、ArrayListMultimap存储对象
Multimap<String,String> multimap= ArrayListMultimap.create();
multimap.put("Fruits","Banana");
multimap.put("Fruits","Apple");
multimap.put("Fruits","Apple");
int size=multimap.size();
#3
System.out.println(size);
Collection<String> fruits = multimap.get("Fruits");
#[Banana,Apple,Apple]
System.out.println(fruits);
二、HashMultimap存储对象
Multimap<String,String> multimap= HashMultimap.create();
multimap.put("Fruits","Banana");
multimap.put("Fruits","Apple");
multimap.put("Fruits","Apple");
int size=multimap.size();
#2
System.out.println(size);
Collection<String> fruits = multimap.get("Fruits");
#[Banana,Apple]
System.out.println(fruits);
误用ArrayListMultimap引发的问题的更多相关文章
- 一次误用CSRedisCore引发的redis故障排除经历
		
前导 上次Redis MQ分布式改造完成之后, 编排的容器稳定运行了一个多月,昨天突然收到ETL端同事通知,没有采集到解析日志了. 赶紧进服务器看了一下,用于数据接收的receiver容器挂掉了, 尝 ...
 - smart pointer  (auto_ptr)
		
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码.本文阐述了如何正确 ...
 - 智能指针auto_ptr  &  shared_ptr
		
转载:智能指针auto_ptr 很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生 ...
 - javascript基础修炼(2)——What's this(上)
		
目录 一.this是什么 二.近距离看this 三. this的一般指向规则 四. 基本规则示例 五. 后记 开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一.thi ...
 - 【腾讯Bugly干货分享】那些年,我们一起写过的“单例模式”
		
题记 度娘上对设计模式(Design pattern)的定义是:"一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结."它由著名的"四人帮",又称 ...
 - 关于std:auto_ptr std:shared_ptr std:unique_ptr
		
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码.本文阐述了如何正确 ...
 - C++ auto_ptr智能指针的用法
		
C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...
 - C++安全异常std:auto_ptr
		
auto_ptr它是C++标准库(<utility>)为了一个智能指针类模板来解决资源泄漏所提供的问题(注意:这只是一个简单的智能指针) auto_ptr在事实原则的实现RAII,对资源的 ...
 - 一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结
		
一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定(软病).在高峰期,时常有几台机器的 ...
 
随机推荐
- Java设计模式系列之状态模式
			
状态模式(State)的定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它 ...
 - DBMS_ERRLOG记录DML错误日志(一)
			
当一个DML运行的时候,如果遇到了错误,则这条语句会整个回滚,就好像没有执行过.不过对于一个大的DML而言,如果个别数据错误而导致整个语句的回滚,会浪费很多的资源和运行时间,从10g开始Oracle支 ...
 - [iOS基础控件 - 6.10] Notification 通知机制
			
A.定义 iOS程序都有一个NSNotificationCenter的单例对象,用来负责发布不同对象之间的通知 任何对象都能够在NSNotificationCenter发布通知,发 ...
 - js奇葩错误  字符串传递问题
			
第一种方式function hello(){ var name="he"; var content="<input type=button value= ...
 - 对iOS中MVC的理解
			
总结于斯坦福大学的白头发老头的公开课 模型-控制器-视图(MVC)是一种将应用中给所有类组织起来的策略 模型(Model)实际上考虑的是“什么”的问题,即你的程序是什么? 以纸牌匹配游戏为例子,模型就 ...
 - 解决IntelliJ IDEA 13更新FindBugs  0.9.993时JRE版本过低导致启动失败问题
			
今晚更新FindBugs 0.9.992(FindBugs 2)至FindBugs 0.9.993(FindBugs 3)后,按要求重启IntelliJ IDEA 13.本想看看更新后多了哪些功能,结 ...
 - centos环境配置
			
1. centos上安装开发环境 yum groupinstall "Development Tools" "Legacy Software Development&qu ...
 - POJ 2195 D - Going Home 费用流
			
D - Going HomeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vie ...
 - POJ1463:Strategic game(树形DP)
			
Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot f ...
 - CCBReader
			
#ifndef _CCB_CCBREADER_H_ #define _CCB_CCBREADER_H_ #include "cocos2d.h" #include "Ex ...