Map中remove()方法导致的死循环

Map中remove()方法导致的死循环

现象描述

业务进程hang住不动了

问题定位

  • 使用jvisualvm 查看耗资源的线程
  • dump线程,转换16进制,找到对应的线程id,找到线程对应代码
  • 分析发现死循环

问题重现

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {

Map<String,String> testmap = new HashMap<String,String>(16);
byte[] b = new byte[]{67,67};
String a = new String(b);
testmap.put(a,"bb");
while(!testmap.isEmpty()){
testmap.remove(b);
}
System.out.println("未出现死循环");
}

执行上面的语句会发现,已经死循环了,为什么?编译的时候并没有报错!!!

结论

直接remove掉数组是remove不掉的,这就不是一个对象,在写基础代码的时候要注意

坚持原创技术分享,您的支持将鼓励我继续创作!