HashMap初步理解之数据结构篇
前言
HashMap的数据结构分析
一、HashMap的数据结构
当JDK1.7时,HashMap的数据结构是:数组(16)+ 链表
当JDK1.8时,HashMap的数据结构是: 数组(16)+ 链表 + 红黑树
二、数据结构的由来
1. 问 : HashMap为什么使用数据和链表?????
数组的长度是16,当由于一些元素的Hash值相同,所以就放到了一个数组里,造成了Hash冲突,于是出现了链表,通过链表串联,但由于链表元素过多,导致查询效率变慢,于是出现了红黑树。
2. 问:什么是红黑树???
构造红黑树的唯一准则:max《= min*2(永远保持在性能较低)
红黑树生成的规则:大于第一个数的,放右边,小于第一个数的放左边
单链:(不平衡的情况下)会进行选择,将右边的数放到左边(达到加快查询速率)
红黑树的本质:二叉树又为平衡二叉树
红黑树中:查询速率最高的=》平衡二叉数
3. 问 :JavaJDK1.8为什么加入红黑树?只是为了提高查询效率吗???
解决服务器dos的问题=》服务器=》受到攻击
HashMap会导致服务器Dos(拒绝服务)
1.比如:HashMap在线程安全的情况下(单线程)(加锁机制)如果使用HashMap都可能导致服务器Dos
2.CVE-2011-4858:(漏洞披露):信息安全漏洞或者已经暴露出来的弱点)
3.容器:比如Tomcat:由于Tomcat使用了(HashMap表),受到影响,导致Dos
关系:链表过长=》导致查询效率慢=》服务器Dos =》必要条件 1.JDK1.8,2.链表长度>8 =》红黑树
Tomcat解决Dos方案:Tomcat通过Max参数=》限制参数数量 (减少Dos)
4. 问:HashMap出现Dos具体表现形式:cpu100%
5. 问:cpu%怎么解决????
1.(kill-9)(jstack)(jmap)(arthas)
具体解决方式:JVM
通过JVMd性能排查=》查具体线程