java8 hashmap 死循环_踩坑了,JDK8中HashMap依然会死循环!
作者:Aaron_涛
原文:blog.csdn.net/qq_33330687/article/details/101479385
是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。
然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=
今日在查看监控时候发现,某一台机器load飙升
感觉问题不对劲,ssh大法登陆机器,top,top -Hp,jstack,jmap四连击保存下来堆栈,cpu使用最高的线程,内存信息准备分析。
首先查看使用最耗费cpu的线程堆栈信息
cat stack | grep -i 34670 -C10 --color
我勒个去,HashMap,猜测八成死循环了,但是我们使用的JDK8,在8中通过栈封闭的链表替换,解决了扩容死循环的问题。疑惑,继续往下看。
根据堆栈信息,root方法是问题所在,点开HashMap源码
好嘛,load飙高,代码有个for语句,我觉得铁定死循环了,看代码情况只可能是两个红黑树节点的父亲节点相互引用才可以导致无法走出这个for语句。
然而这都是我的猜测,我没有证据。而且让我追红黑树的代码,也是需要耗费大量时间的事情,我需要快速验证我的猜测。
我之前dump下来了堆内存信息,我通过jhat 命令生成html的内存信息页面
然后输入http://localhost:7000查看
我先找业务代码中持有这个HashMap的对象,然后点进去查询内部信息
因为数据都放在table中,点击Table字段,查看其内容
table中存在唯一的一个TreeNode节点,这肯定是已经变成了红黑树了
点进去查看
点击parent字段信息
0x72745d828与0x72745d7b8两个TreeNode节点的Parent引用都是对方。
后续打算深入研究一下红黑树什么场景会造成这个原因。
最后,无论什么并发场景请别使用HashMap,ConcurrentHashmap大法好
最后
欢迎关注公众号:程序员追风,回复 003 获取Java面试手册(200多页PDF总结)
java8 hashmap 死循环_踩坑了,JDK8中HashMap依然会死循环!相关推荐
- 撸啊撸,再次撸HashMap源码,踩坑源码中构造方法!!!每次都有收获
前言 点赞在看,养成习惯. 点赞收藏,人生辉煌. 点击关注[微信搜索公众号:编程背锅侠],第一时间获得最新文章. HashMap系列文章 第一篇 HashMap源码中的成员变量你还不懂? 来来来!!! ...
- JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry 1 transient Entry<K,V>[] table; 我们向 HashMap 中所放 ...
- Java集合:JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry<K,V>[] table; 我们向 HashMap 中所放置的 ...
- 红黑树分析与JDK8中HashMap源码解析
红黑树分析与JDK8中HashMap源码解析 BST O(1), O(n), O(logn), O(nlogn) 的区别 红黑树-RBTree 插入数据 HashMap中红黑树的插入操作 HashMa ...
- 踩坑了,JDK8中HashMap依然会产生死循环问题!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Aaron_涛 blog.csdn.net/qq_3 ...
- window查看端口号使用_踩坑搭建vue说端口号被占用?
" 最近自己有时间搭建了一下vue框架,遇到了一个问题,端口号被占用" 这个时候我就根据这个报错搜了一下百度,遇到了 解决方法(本人使用mac系统):在控制台输入sudo lsof ...
- 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题
❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...
- hashmap 遍历_这21个刁钻的HashMap面试题,我把阿里面试官吊打了
1:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过 8 时,链表转换为红黑树. transient Node[] table; 2:Ha ...
- hashmap原理_想要彻底搞懂HashMap?你得恶补下HashMap原理
引言 唉! 金九银十转眼已过, 面试现场不知所措: 不懂原理是我过错, 今日弥补只为求过. ====================================================== ...
最新文章
- scala while循环中断
- javascript中对象在OOP方面的一些知识(主要是prototype和__proto__相关)
- day17 - 动态内存的分配初步理解
- 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
- 给sublime设置格式化代码的快捷键
- [PowerShell] PowerShell学习脚印
- 第十一章:配置和安全---IntelliMorph
- 设计模式学习笔记-基础知识篇
- php面试题接口方面,php面试题6 - osc_xb4v1nhl的个人空间 - OSCHINA - 中文开源技术交流社区...
- html div 水平垂直居中显示,利用CSS实现div水平垂直居中
- 16bit随机数生成matlab,关于matlab生成随机数
- 网络克隆安装linux系统下载安装,pxe网刻工具_诚龙网刻教程_网络克隆安装windows7...
- Adober Pro DC 破
- JAVA中日期格式格式化
- 麒麟V10打印机ppd文件导入导出
- 我国超级计算机的发展成就,中国最近的科技发展成就
- 线上AI僚机,告诉你对方喜好,手把手教你如何正确约会
- VC遍历INI配置文件
- 刺激越多效果越好?无创神经调控技术(rTMS)缓解疼痛
- 案例3 淘宝点击关闭二维码
热门文章
- 5、Power Map—实例:填充地图
- 企业是否真的需要BI?
- 从sap xi生产wsdl文件,客户端怎么做webservice?
- abap 字符串处理
- 小企业“银行存款”科目的核算内容包括哪些?
- ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)
- SAP中smartforms参数
- html里面onclick属性是什么,html中onclick事件属性定义与用法
- think in java i o_5.[Think in Java笔记]Java IO系统
- vue点击改变data_vue实现响应式原理即vue如何监听data的每个属性的变化