Map.computeIfAbsent方法引出的OOM问题定位
1、问题
设置预约内容时出现OOM。
2、分析过程
2.1、通过jvisualvm打开堆栈数据:java_pid6.hprof
2.2、点击oom线程链接
- 可以发现问题处在HashMap的computeIfAbsent方法中
2.3、查看出问题的代码(98行)
- 可以看到computeIfAbsent方法的第一个入参为:订单id,第二个参数为:ArrayList::new
2.4、查询HashMap源码(1127行)
- 这里的mappingFunction是new ArrayList(key)
- key为:订单id
- 当订单id过大时,会出现OOM
2.5、复现问题
1 | public class OomDemo { |
3、思考
3.1、如何规避
- 指定Map中value对应的集合的大小,如:
1 | public class OomDemo { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!