ConcurrentHashMap性能测试

之前在测试commons-pool2相关实现的时候,发现线程接近500时候,性能瓶颈降低非常厉害,就好像碰到了总体性能的天花板一样,随着线程继续增加而单线程性能急速下降的现象。当时粗略判断其中一个原因是用来存储对象映射关系的java.util.concurrent.ConcurrentHashMap存在瓶颈导致。

所以今天我特意来测试一下java.util.concurrent.ConcurrentHashMap的查询性能,其他增改的功能暂时不做测试了。关于另外一个可能的原因java.util.concurrent.atomic.AtomicLong,我们下期再测。有兴趣的可以先看看我之前对于更强大的多线程计数器java.util.concurrent.atomic.LongAdder的性能测试:性能测试中的LongAdder。下面是之前遇到两种不同类型的对象池的性能测试文章:通用池化框架GenericObjectPool性能测试、通用池化框架GenericKeyedObjectPool性能测试。

测试方案

先说一下思路和场景设计。思路还是沿用之前的性能测试,通过固定线程的性能模型进行测试,通过调整次数和线程数来测试java.util.concurrent.ConcurrentHashMap的性能表现。场景设计上我先把java.util.concurrent.ConcurrentHashMap添加N个key和value,然后通过多线程随机从这些key里面取值。

这样本地测试就有了三个变量线程数、次数、key的数量,本次重点放在了200线程以上的性能表现。

PS:硬件和软件配置参考以前的文章,这里就不多说了。

测试用例

照例方案依旧使用FunTester性能测试框架提供的能力,采取Groovy脚本实现。相信有一定Java基础的同学阅读起来是没有问题的。

package com.funtest.groovytestimport com.funtester.base.constaint.FixedThreadimport com.funtester.base.constaint.ThreadBaseimport com.funtester.frame.SourceCodeimport com.funtester.frame.execute.Concurrentimport java.util.concurrent.ConcurrentHashMapclass ConcurrentHashMapTest extends SourceCode { static ConcurrentHashMap maps = new ConcurrentHashMap() static int times = 1_0000 static int threads = 200 static int num = 100 static def desc = “ConcurrentHashMap性能测试” public static void main(String[] args) { 1.upto(num) { maps.put(it, it) } ThreadBase.COUNT = false RUNUP_TIME = 0 new Concurrent(new FunTester(), threads, desc).start() } private static class FunTester extends FixedThread { FunTester() { super(null, times, true) } @Override protected void doing() throws Exception { maps.get(getRandomInt(num)) } @Override FunTester clone() { return new FunTester() } }}

测试结果

由于测试中基本都触碰到硬件(CPU)瓶颈,所以本次也就不记录CPU使用率了,相当于都是在CPU资源有限情况下的性能测试数据,其实测试中发现次数影响也不大。

线程数 次数(千) key数量 单线程QPS 200 10 100 3038 200 20 100 3539 200 40 100 4066 200 80 100 4334 200 10 200 2823 200 20 200 3587 200 40 200 4736 200 10 400 2919 200 10 50 2873 200 10 20 3218 200 10 1000 3256 300 10 100 1893 300 20 100 2514 300 40 100 3214 300 20 300 1798 300 20 500 2832 500 20 100 1722 500 20 1000 1509 1000 20 1000 816 1000 10 100 724

测试到此,结论比较明显了,影响java.util.concurrent.ConcurrentHashMap的主要因素还是机器CPU资源不够用了。对于相同的资源情况下,线程数更低自然获得更强的单线程性能,如果增加线程确实可以获取更大的总体QPS。在key值方面,值越多,QPS越低。在测试次数上,自然是字数越多,QPS也大,也符合之前多次测试中的结论。

但是当我重新检查代码的时候却发现一个问题,在com.funtest.groovytest.ConcurrentHashMapTest.FunTester#doing方法中其实还有一段耗时的请求,就是com.funtester.frame.SourceCode#getRandomInt,经过我重新测试,发现java.util.concurrent.ConcurrentHashMap的性能得到了十几倍的提升。

不得不说我大意了,本期文章标题应当修改为java.util.concurrent.ThreadLocalRandom性能测试。

一下是com.funtester.frame.SourceCode#getRandomInt的内容:

/** * 获取随机数,获取1~num 的数字,包含 num * * @param num 随机数上限 * @return 随机数 */ public static int getRandomInt(int num) { return ThreadLocalRandom.current().nextInt(num) + 1; }

我依此法重新测试了java.util.concurrent.atomic.AtomicLong,发现也是QPS超高,排除了我之前的想法。看来commons-pool2的瓶颈不在这两个地方。以后等我仔细再研究研究,有结论再跟大家分享。

Have Fun ~ Tester !

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月16日
下一篇 2022年6月16日

相关推荐

  • 你需要怎样的人生框架

    芸芸众生,大多数人的人生轨迹从一出生就决定好了,从学生时代到进入社会变成一个打工仔,建立家庭,结婚生子,还清房贷,几乎已经年过半百。 这就是一个人生框架。你可能很多时候意识到了这一…

    2022年6月27日
  • 科学家首次发现患骨化纤维瘤的鼬科动物化石

    光明日报讯(记者张蕾、张晓华)中国地质大学(北京)邢立达课题组在甘肃临夏盆地发现一只小型鼬科动物——副美洲獾颅骨,其上颌牙齿的远中区域有明显增生病变,经研究确定为骨化纤维瘤,这是首…

    2022年6月24日
  • 单场8个3分砍44分!具备欧美打法的00后,郭艾伦接班人基本确定

    男篮亚洲杯即将迎来关键战役,经过世界杯和亚洲杯的几场比赛后,发现我们本土的后卫,的确有一些应该退位让贤,并不是说他的能力不行,而是我们要培养更多的年轻球员,毕竟不能靠老将打一辈子,…

    2022年7月22日
  • 大容量电池vivo X80 Pro登场,vivo X70沦为白菜机,买早网友受伤

    vivo X80 Pro内置4700mAh大容量电池,正常情况下可以轻松袖手旁观一整天。在80W的双芯闪充加持下,vivo X80 Pro只需一洗即可快速回血到手机。对于大多数普通…

    2022年7月1日
  • Node.js vs Python:如何选择最好的技术来开发你的后端

    选择后端编程语言绝非易事。毕竟不同的语言各有优缺点,我们需要考虑它是否是构建应用程序的正确工具。 Node.js 和 Python 是后端开发的两个最受欢迎的选择。两者都有非常强大…

    2022年6月15日
  • 舌尖上的拜“金”主义该停了

    一些“镀金食品”在售卖时大肆宣传的“有益健康”卖点,其实并不属实。金银箔粉并不会被身体吸收,只会原样排出体外,对人体并无营养价值 针对“镀金食品”的监管存在难度,最核心的原因是规范…

    2022年8月11日
  • 2022年,领克有哪些重要时刻?

    时间飞快,眨眼2022年过去一半了 这半年时间领克有哪些重要时刻呢 我们一起来回顾一下吧~ 一起【潮】未来,2022年6月,领克销量13193辆,上半年累计销量更是达到了77258…

    2022年7月29日
  • 颜值在线,续航超600km!荣威这台落地15万的家轿值得一看

    【太平洋汽车网 评测频道】现如今我们的新能源车型的友好度越来越来,一方面肯定是现在的高油价,另一方面确实在续航能力上以及有了很大突破,让使用者不在将重点放在续航焦虑问题了。同时技术…

    2022年7月1日
  • 2022年换手机别错过618!这两款大胆入手,不必苦等下半年新旗舰

    虽然目前618大促正如火如荼地进行中,但相信仍有相当一部分人想着等下半年的iPhone 14系列和骁龙8+旗舰再换机。不过,需要知道的是,届时旗舰新机发布价格肯定不低,并且要用上新…

    2022年6月14日
  • 探索微观世界的无穷奥秘(科技大观)

    来源:【人民网】 近日,欧洲核子研究中心宣布,大型强子对撞机上的“底夸克实验”与“紧凑缪子线圈实验”分别发现了4种和1种新的复合粒子。至此,在大型强子对撞机上探测到的复合粒子数量已…

    2022年8月18日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息