hashMap或者concurrenthashmap 调用entrySet方法都出现导致内存泄漏情况:
java.lang.OutOfMemoryError: Java heap space
经过核实map.entrySet().size() map.keySet().size() map.values().size() 大小都不超过100,可使用内存大小在500M以上
在sb.append() 方发出出现溢出:
存在一个线程在map.put数据,另一个线程在 for下面的点
StringBuffer sb = new StringBuffer();
for (Entry entry : map.entrySet()) {
sb.append(entry.getKey()).append(";").append(entry.getValue()).append("|");
}
return sb.toString();
我有几个问题需要确认
1、你的服务器内存多少?现在如果map里的数据不超过200M,并且可用内存500M,如何出现OOM?
2、sb.append()拼接字符串这个字符串大小加上一起会超过500M吗?
3、另外一个线程在存在一个线程在map.put数据,这个数据是多少?
4、如果map中老的数据没有淘汰删除,sb也会占用内存,新增数据,多少,三者一起很可能超过500M可用内存。
请检查一下代码在确认一下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。