当前位置: 首页 > news >正文

公司网站建设的市场需求做神马网站优化

公司网站建设的市场需求,做神马网站优化,网站开发融资计划,宁波网站推广优化背景 今天数据采集项目碰到一个性能问题#xff0c;3000多个采集点#xff0c;每一个采集点每秒送一个数据#xff0c;接收到数据之后首先需要内存中做缓存#xff0c;之后有一系列的业务分析处理#xff0c;所以#xff0c;对系统性能要求比较高。 最近几天发现服务器…背景 今天数据采集项目碰到一个性能问题3000多个采集点每一个采集点每秒送一个数据接收到数据之后首先需要内存中做缓存之后有一系列的业务分析处理所以对系统性能要求比较高。 最近几天发现服务器cpu大多时间都在100%以上所以就重点分析了缓存方案确实是缓存方案有问题修改之后初步验证cpu降低到50%左右更换了第二个缓存方案之后cpu降低到了大概30%左右。 所以不同的缓存方案对于高并发场景下应用性能的影响还是蛮大的。 java中的缓存大部分都是通过HashMap实现的突然想到之前就记录过HashMap学习笔记找了半天才找到差点丢了重新找回来做个记录。 搞一个Map学习系列从HashMap开始。 认识HashMap HashMap是java中应用最广的集合类之一以key/value(键值对的方式保存数据。 你可以把HashMap叫做集合类也可以把它叫做容器java中许多容器框架比如Spring其实好多都是用HashMap来存储数据的。 当然java秉承“一切都是对象”HashMap中存储的当然也是对象只不过是以“键值”对组成的对象。 HashMap继承自AbstractMap并实现了Map接口。所以想要彻底搞懂HashMap还是需要先从Map接口、以及AbstractMap入手。 Map接口 其实Map接口没啥东西接口而已。定义了size()、isEmpty()、get()、put()、containsKey()、containsValue()…等通用的Map类方法。 相对重要一点的是Map接口定义了一个EntryK,V内部接口这个Entry其实就是Map包含的对象不同的Map的实现类会有不同的实现。 Map接口也实现了几个方法具体暂时就不详细分析了这其实是一个很好的针对“接口是否可以实现方法”这个问题的很好的答案。 AbstractMap抽象类 AbstractMap抽象类实现了Map接口具体化了部分Map接口定义的方法。 实现了一个叫SimpleEntry的Entry就是Map接口中定义的内部接口还有一个叫SimpleImmutableEntry的Entry。 暂且不表不影响主题识别HashMap真面目。 HashMap的数据结构 回过头来再继续研究HashMap首先识别HashMap的数据结构我们先从简单的入手一步一步抽丝剥茧、先易后难逐步研究。 首先来认识一下Node。 Node是Entry的实现数据结构非常简单 final int hash;final K key;V value;NodeK,V next;哈希值、key、vaue以及指向下一节点的简单的链表结构。 HashMap桶内Node链表容量增大之后会自动修改简单链表结构为红黑树本篇暂不研究红黑树。 table数组 table数组是HashMap真正存储数据的地方所以说白了HashMap底层实际上还是数组。 不过HashMap的table是比较特殊的数组数组内的每一个对象其实就是我们常说的桶桶内装的是NodeK,V对象也就是我们放置到HashMap中的键值对。 HashMap的初始化 HashMap提供了几个不同的初始化方法区别无非就是有没有初始化容量大小、有没有初始化对象、有没有初始化的loadFactor和threshold。 这几个概念需要我们一个个慢慢去了解。 容量 就是HashMap中table数组的大小HashMap的容量是2的n次方初始化不设置容量的话默认16初始化如果设置了 initialCapacity 的话则HashMap的容量是最接近initialCapacity并且大于initialCapacity的2的整数次幂比如initialCapacity设置为3,4,5则HaspMap最终容量为8设置为9,10,11…则HashMap的最终容量为16以此类推。 这个容量计算是通过tableSizeFor方法实现的我们暂时按下好奇心这个方法为什么能实现大于输入参数cap的最近的2的整数次幂。 static final int tableSizeFor(int cap) {int n cap - 1;n | n 1;n | n 2;n | n 4;n | n 8;n | n 16;return (n 0) ? 1 : (n MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n 1;}loadFactor 直译为装载因子意译为扩容因子初始值设置为0.75。threshold threshold是扩容阈值HashMap的容量loadFactorthreshold。当HashMap存放对象的数量增长到threshold的时候进行扩容。 比如HashMap初始化容量为16默认loadFactor为0.75则threshold160.7512。则当HashMap存储对象的数量size大于12的时候HaspMap调用resize()方法自动扩容。 4.size 可以通过调用size()方法获取到HashMap内实际存放的对象数。我们如果要想搞清楚HashMap的真面目最好能对size和容量Capacity有清楚的认识。size是对应用很有价值的数据我们开发过程中所说的一个HashMap的大小其实指的就是size。而Capacity对应用来说没有什么意义只是HashMap内部使用的概念只对那些对HashMap内部结构有兴趣、想要研究清楚其工作机制的同学有意义。 ###HashMap赋值 HashMap的赋值逻辑如下假设待存放的数据为ekey1,value1 检查table数组为空的话初始化指定容量或者默认容量的table数组根据key1的哈希值计算得出算法为容量 - 1 hash(key1)对应的桶。这一步很重要一般来讲优秀的hash算法能够尽可能确保不同的key值得到不同的hash值也就可以确保放入不同的桶内。但是不可避免的可能会存在不同key值得到相同hash值的情况hash冲突key1key2,hash(key1)hash(key2)这种情况下就会放置在相同的桶比如table[5]内。得到桶之后判断桶内是否已经有数据。没有数据则直接new一个NodenewNode(hash, key1, value1, null)放在桶中结束。否则桶内有数据有两种情况一是为键值key1重复赋值、二是hash冲突。如果是hash冲突则new一个NodenewNode(hash, key1, value1, null)并将其设置为桶内的最后一个Node。如果是重复赋值桶内数据的key值key1则为key1重新赋值value1并返回key1的旧值 所以我们可以看到针对key而言HashMap不重复意思是说相同的key只在HashMap中只保留一份数据。 并且一般情况下HashMap的一个桶内只保留一个对象只有在hash冲突发生了之后桶内才有可能放置多于一个对象以链表结构保存。 HashMap中的null对象 此处null对象指的是HashMap中的key值为null的Node对象。 大家都知道HashMap允许且仅能存储keynull的一个对象比如代码 HashMap hmString,String new HashMap();hm.put(null,its null);hm.put(null,i am null);hm.put(null,null loves null);最终hm容器中只有一个null对象并且hm.get(null)得到的应该是 “null loaves null”。 这背后的原因可以从上述HashMap赋值逻辑中找到答案你只要知道null的hash值是0就可轻易得出以上结论。 从HashMap获取数据 通过getkey方法获取数据的逻辑如下假设要获取的数据keykey1 table数组不为空并且数组长度大于0则采用与put数据相同的算法得到key1值对应的桶。桶内不空则从第一个节点开始检查如果节点key值等于key1则返回该节点的value。如果第一个节点不满足条件则依次检查桶内所有其他节点。桶内空或者桶内不空但是没有找到满足条件的对象应该不可能则返回null表明当前HashMap中不存在key值为key1的对象 需要注意的一点是检查节点key值等于key1的逻辑是 两个对象相等或者两个对象不为null且key1.equals(key)。 好了以上相信已经能够揭开HashMap神秘面纱之一角了。
http://www.dnsts.com.cn/news/15486.html

相关文章:

  • 关于二手书的网站开发ppt比较好的室内设计网站
  • c 可以用来做网站吗青岛营销推广
  • 如何由网页生成网站成都网站制作价格
  • iis 里没有网站吗和各大网站做视频的工作
  • 山东住房和城乡建设厅网站主页合肥瑶海区事业单位
  • 建网站最专业wordpress调用96编辑器
  • 印刷网站源码做瞹瞹瞹视频免费网站
  • 电脑网站怎么创建到桌面上网站建设合同需要缴纳印花税
  • 网站空间购买北京郑州网站建设方案服务
  • 遵义网站建设txwldiscuz应用中心
  • 网站首页作用乌兰浩特网站制作
  • 厦门网站建设方案维护网站建设公司哪个好点
  • 网站安全证书海宁市住房与城乡规划建设局网站
  • 营销型网站案例创建网站的过程
  • 网站建设开发维护网页设计与制作课程小结
  • 蔡甸网站建设金华市住房和城乡建设厅网站
  • 服务器和网站维护天水做网站的
  • 深圳网站备案网站链接分析工具
  • 企业管理咨询心得体会苏州seo服务
  • 代做设计网站嵊州市建设银行网站
  • 中山网站建设哪家便宜东莞网站开发网站建设制作费用
  • 单页网站模板修改吗网站如何做好用户体验
  • 怎么给自己的网站推广个人网站做cpa
  • 企业网站怎么收录wordpress图片保存
  • 杭州网站备案要多久电子商务网站开发平台
  • 广西seo网站如何seo推广
  • 三角网站建设wordpress中文免费
  • 如何利用服务器做网站wordpress+程序优化
  • 网站模板 在哪购买教育机构网站源码
  • 网站代备案流程图济南市个人网站制作