踩坑了,JDK8中HashMap还是会产生死循环问题!

kubedns-coredns部署pod出现not ready问题 文章目录遇到的问题1、发现问题2、排查问题3、解决方法 coredns的实例health_check不通过的问题,排查和解决方法 遇到的问题 1、发现问题 pod启动但是未ready 查看是readiness失败 使用对应的URL进行curl,发现真的返回503 2、排查问题 查看错误日志,发现一堆这个错误"waiting on : kubernetes" 网上相关的问题解答 这个跟测试场景不一样,这个案例是开了防火墙,可以确认我这个案例的机器没有开防火墙,但它提醒了一点,coredns是需要访问ap 阅读详情

推荐阅读:

JDK8中HashMap依然会死循环!

是否你听说过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大法好

零基础速成simulink代码生成——stateflow基础3 此专栏面向嵌入式工程没有matlab开发经验的人,可以快速学习和实践这门技术。MDB技术,越来越成熟和普遍,从手写代码转到基于模型开发已经是大势,不仅减少开发周期,还增加代码的复用性。汽车领域、医疗和算法建模广泛使用。 阅读详情

相关推荐

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 541

access如何保存小数点后_14、ACCESS参数查询与计算字段设计(ACCESS图解操作系列)...

操作要求:在ACCESS数据库“教学管理.accdb”中有一“教师”表,如下图。1、创建“输入起止工作时间-教师参数查询”。通过用户输入起止工作时间,来查询在该时间段内参加工作的相关教师。结果显示全部字段、要求提示分别为:“请输入起始时间:”、“请输入终止时间:”。2、创建“教师教龄大于某输入值-参数查询”。以教师表为数据源,通过用户输入一整数设定教龄下限,显示教龄大于该值的相关教师全部字段。要求...

weixin_39665847的博客 1150

PHP版本对接支付宝支付接口 电脑网站 详细介绍 沙箱环境 超简单易懂

PHP版本对接支付宝支付接口 其实理顺了思路后,按照我接下来的步骤来,真的超级简单啊,为啥有那么多的朋友们折腾了那么久呢,嘿嘿,跟我走吧~ 我是昨天晚上洗完澡之后,大概八九点,才开始正式开工尝试去这一工程的,我去支付宝的蚂蚁金服开放平台里把各个知识点和文档大概都看了一遍,大致弄明白了要怎么操作了,建议大家看看电脑网站开发文档,忙到了夜里十二点左右,成功地用支付宝给的Demo完成了付款操...

爱玲姐姐的博客 1万+

MySQL数据库:多表连接查询

多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where 条件表达式] # 语法2 from 表1,表2 where 主键字段=外键字段 [ and 条件表达式] # 三个表连接 from 表1 inner join 表2 on 主键字段 = 外键字段 inner join 表3 on 主键字段 = 外键字段 [where 条件表达式]; fro...

Unknowncheats的博客 288

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

代码实现ROS2bag录制数据和回放数据(C++)

ROS2的ROS2bag功能可以将指定Topic中的数据以.db3的格式(不同于ROS)保存到本地文件中。读取文件数据可以实现数据回放。

m0_57124501的博客 3256

Access2003 循环引用 错误提示解决办法

在自学Access2003时,有一题是要求“显示Student表中学生的姓名、性别和年龄加1的结果”,用SQL语言表述。我用的SQL语句是:SELECT 姓名, 性别, 年龄+1 AS 年龄 FROM student; 但点击运行时会提示如下错误:最后在网上找到一个类似问题的解决方法,同样适用本题,实测有效。方法如下:工具-> 选项-> 表/查询-> SQ...

weixin_34019929的博客 421

DMC-E 系列总线控制卡----雷赛板卡介绍(十七)

低的速度平稳地接近目标位置,降低运动部件对接触点的冲击。设置插补目标位置,插补方向,以确定插补动作。圆形区域限位,即运动仅在用户设定的圆形范围内进行,超出这个范围,运动会依据设定。首先,用户需要绑定两个轴进而确定该功能所处的坐标系。仅支持平面圆形限位,不支持空间圆形限位。径,可以确定该区域在坐标系中的位置。)运动开始前,用户应当将旋转轴调整到与插补曲线的起点位置相切的角度;可以配合椭圆插补或圆弧插补运动,实现跟随轴的旋转运动角度与曲线当前。外,其它运动形式若开始运动时在限位区域外,则禁止运动;

A_nanda的博客 653

odbc select 别名循环引用_#图解 轻松看懂「指针的引用*&」

写这篇文章是因为指针的引用在数据结构中的树和图的算法中应用广泛。如指针一样,指针的引用容易使人困惑。我之前的一篇文章「#图解 数据结构:轻松搞定线索二叉树」有解释过这个部分,所以我想把指针的引用单独拎出来讲,希望更多的人能够看到。Nice小夫:#图解 数据结构:轻松搞定线索二叉树​zhuanlan.zhihu.com我们注意到类似下面这种语法void func(int *&x) { ++...

weixin_39687422的博客 211

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案 简单统计法: 这个原则有个条件:数据需要服从正态分布。 在3倍标准差原则下,异常值如超过3倍标准差,那么可以将其视为异常值。正负3的概率是99.7%,那么距离平均值3之外的值出现的概率为P(|x-u| > 3) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。 分位数法(箱图法、箱型法): 并不是说从高斯分布中抽出的所有数据都符..

data+scenario+science+insight 1795

六种光耦综合对比——《器件手册--光耦》

可控硅输出光耦(SCR Optocoupler)是一种特殊的光电耦合器,由红外发光二极管(LED)和双向可控硅(SCR)组成,用于实现输入和输出之间的电气隔离和信号传输。逻辑输出光耦是一种高效、可靠的数字信号隔离和电平转换器件,通过电气隔离和逻辑电平输出,确保了系统的安全性和信号的稳定性。固态继电器(可控硅输出,SSR)是一种无触点电子开关设备,利用可控硅(SCR或Triac)作为主要开关元件,通过光耦合器实现输入和输出之间的电气隔离。光耦作为一种成熟的电气隔离器件,在电子电路设计中具有重要的地位。

XU157303764的博客 1726

不正确使用HashMap,造成CPU 100%的问题

最近项目一启动服务器偶 缓存数据阶段就出现CPU占用100%的情况,以前不是每次都能reproduce. 昨天专心找了一下出现这种情况的case. 参考各类blog 【不正确使用HashMap,造成CPU 100%的问题】和一些关于多线程的技术文档【浅谈Java多线程的同步问题】。 分析了一下. 先列出问题的代码: public class DataManager {    .

Not In System 1144

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

踩坑了,JDK8中HashMap依然会产生死循环问题!

点击上方 "程序员小乐"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!关注订阅号「程序员小乐」,收看更多精彩内容每日英文Do a plain and neat ...

程序员小乐 1573

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

踩坑了,JDK8 中 HashMap 依然会产生死循环问题!

摘要 JDK8虽然通过尾插法和红黑树优化解决了JDK7中HashMap多线程扩容时链表成环导致的死循环问题,但在并发场景下仍存在隐患。红黑树的旋转操作可能因线程竞争引发指针错乱(如互相引用),导致新的死循环,且排查难度更高。此外,HashMap在多线程环境下还会出现数据覆盖、丢失及可见性问题。线上故障可通过top、jstack和堆转储分析定位,表现为CPU飙升或TreeNode结构异常。解决方案:严格避免在多线程中使用HashMap,优先选用ConcurrentHashMap(JDK8采用CAS+细粒度锁)

油墨香^-^的博客 710

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java8 hashmap 死循环_踩坑了,JDK8中HashMap依然会产生死循环问题!

作者:Aaron_涛blog.youkuaiyun.com/qq_33330687/article/details/101479385是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=今日在查看监控时候发现,某一台机器load飙升 感觉问题不对劲,ssh大法登陆机...

weixin_26833139的博客 145

cpu飙升 死循环_踩坑了,JDK8中HashMap依然会产生死循环问题!

(给ImportNew加星标,提高Java技能)转自:Aaron_涛链接:blog.youkuaiyun.com/qq_33330687/article/details/101479385是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=今日在查看监控时...

weixin_42517486的博客 119

cpu飙升 死循环_踩坑了,JDK8 中 HashMap 依然会产生死循环问题!

是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。​ 然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=​ 今日在查看监控时候发现,某一台机器load飙升 感觉问题不对劲,ssh大法登陆机器,top,top -Hp,jstack,jmap四连击保存下来堆栈,cpu使用最高的线程,内存信息准备分析。首...

weixin_33532756的博客 168

access 字段别名提示循环引用_踩坑了,JDK8中HashMap依然会产生死循环问题!

是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=今日在查看监控时候发现,某一台机器load飙升感觉问题不对劲,ssh大法登陆机器,top,top -Hp,jstack,jmap四连击保存下来堆栈,cpu使用最高的线程,内存信息准备分析。首先查看使用最...

weixin_39926042的博客 186

为什么HashMap会产生死循环?

HashMap死循环是一个比较常见、也是比较经典的面试题,在大厂的面试中也经常被问到。HashMap的死循环问题只在JDK1.7版本中会出现,主要是HashMap自身的工作机制,再加上并发操作,从而导致出现死循环。JDK1.8以后,官方彻底解决了这个问题。 1、数据插入原理 在分析原因之前,我先带大家了解一下JDK1.7中HashMap插入数据的原理,来看动画演示: 由于JDK1.7中HashMap的底层存储结构采用的是数组加链表的方式。 而HashM...

Tom弹架构 1万+

JDK1.8HashMap会发生死循环吗?

面试官:JDK1.8HashMap会发生死循环吗?

shang_0122的博客 4012

多线程下的HashMap死循环问题详解

小伙伴们大家好呀,今天看技术博文的时候看到一个很有意思的问题,就如标题所示------》在多线程的情况下关于HashMap的死循环问题,还记我在刚学JavaSE时候,看到过这个问题,当时的知识储备不够,没有深究,今天来详细说一说,希望能帮到你们,一起进步。 正文开始: Java的HashMap是非线程安全的。多线程下应该用ConcurrentHashMap。 多线程下[HashMap]的问题(这里主要说死循环问题): 1、多线程put操作后,get操作导致死循环。 2、多线程put非NULL元素后,get操

m0_46405589的博客 3773

HashMap在jdk1.8也会出现死循环的问题(实测)

昨天在面试的时候,面试官问到HashMap在多线程并发的情况下怎么出现死循环的? 我当时非常有底气的回答:Hashmap在jdk1.8之前多线程同时进行put操作,并且同时进行扩容的时候可能会出现链表环,导致死循环的发生。 面试官紧接着问:那1.8就不会出现死循环了吗? 底气瞬间消失,思考一会:1.8在多线程的情况下HashMap会出现数据丢失的问题,比如…(给面试官举了个栗子)。 面试官毫无波澜...

Liu_JM的博客 8380
上一篇: 我把某大厂P8大牛手写的 Linux+网络编程 手册搞到手了
下一篇: 强势来袭!阿里巴巴技术团队共同携手编写的“大厂面试参考指南”v1.0版本
「已注销」
博客等级 码龄6年 36粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值