开发者社区> 问答> 正文

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

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();

展开
收起
月下丶 2018-12-14 21:10:59 2188 0
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学讲师,主讲《微服务Spring Cloud设计与开发实战》《MongoDB高级实战》等课程 2.MongoDB中文社区专家 3.《MongoDB实战》第2版译者 5.吉林大学计算机科学学士、上海交通大学硕士

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

    2019-07-17 23:21:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载