开发者社区> 问答> 正文

[@徐雷frank][¥20]java map entry() 方法导致 OutOfMemoryError?

月下丶 2018-12-14 21:10:59 318

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)
  • 徐雷frank
    2019-07-17 23:21:33

    我有几个问题需要确认
    1、你的服务器内存多少?现在如果map里的数据不超过200M,并且可用内存500M,如何出现OOM?
    2、sb.append()拼接字符串这个字符串大小加上一起会超过500M吗?
    3、另外一个线程在存在一个线程在map.put数据,这个数据是多少?
    4、如果map中老的数据没有淘汰删除,sb也会占用内存,新增数据,多少,三者一起很可能超过500M可用内存。
    请检查一下代码在确认一下。

    0 0