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

java同步开销_java – 为什么对Map的同步访问会增加大量的开销

此代码是基础(最快):

Map map = new HashMap<>();

for (E e:source) map.put(e.getKey(), e.getValue());

这段代码比较慢(x2):

Map map = new HashMap<>();

synchronized(map) {

for (E e:source) map.put(e.getKey(), e.getValue());

}

这段代码更糟糕(x20):

Map map = new HashMap<>();

synchronized(map) {

source.forEach(map::put);

}

为什么那些大的差异?如果HashMap真的是轻量级的而且不是线程安全的(没有同步的),那么开销应该可以忽略不计.除了锁之外应该是可重入的.

当使用Properties时,我实际上得到了相反的效果,正如我所期望的那样:我通过预先获取单个锁(在循环开始之前)来节省时间.

有人可以解释这些差异吗?

请注意,我使用以下JVM选项:-Xms4g

解决方法:

If a HashMap is truly lightweight and not thread-safe (no synchronized), then overhead should have been negligible.

这是一个完全不成功的问题.同步块内部的操作越轻,同步的相对开销就越高.

Besides locks are supposed to be reentrant.

他们是.所以?这里没有重新进入.

标签:java,hashmap,synchronized,performance

来源: https://codeday.me/bug/20190702/1355789.html

相关文章:

  • java字节码常量池_Java字节码常量池深度剖析与字节码整体结构分解
  • java控制语句案例_Java基础之流程控制(示例代码)
  • mysql 怎么设置ip地址_Mysql如何设置用户指定ip地址操作数据库
  • android_iphone和java三个平台一致的加密方法_Android、iPhone和Java三个平台一致的加密工具...
  • java最崇拜谁_蓝桥杯(java)个人赛真题:小朋友崇拜圈
  • java数组函数结局实际问题_java函数与数组
  • java登录字符串封装_JAVA的随机的字符串的封装(基本上够用了)
  • java统一管理文字_为了统一管理组件和容器,Java为所有组件类定义的超类
  • django mysql 分表_Django数据库分表
  • php aws_Amazon S3 客户端加密与 AWS SDK for PHP 版本 3 - 适用于 PHP 的 AWS 开发工具包...
  • Php公钥加密data是空,实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
  • java做节奏大师,《节奏大师》高手必修之路 亲测攻略_iOS游戏频道_97973手游网
  • 注册php tp5,thinkphp5 开发会员注册与登录功能
  • php xml序列化,深入理解:XML与对象的序列化与反序列化
  • matlab ceil,Matlab中的取整函数fix, floor, ceil与round
  • python3.6+scrapy+mysql 爬虫实战
  • Angular数据绑定机制
  • docker-consul
  • Java读取Properties文件的六种方法
  • js中forEach回调同异步问题
  • Python语法速览与机器学习开发环境搭建
  • SpingCloudBus整合RabbitMQ
  • spring学习第二天
  • 码农张的Bug人生 - 初来乍到
  • 前端自动化解决方案
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信开源mars源码分析1—上层samples分析
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !!Dom4j 学习笔记
  • #宝哥教你#查看jquery绑定的事件函数
  • $.ajax()
  • (11)MATLAB PCA+SVM 人脸识别
  • (12)Linux 常见的三种进程状态
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net 8.0 新的变化
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 的程序集加载上下文
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET导入Excel数据
  • .net连接oracle数据库
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @RequestMapping-占位符映射
  • [Angular 基础] - 表单:响应式表单
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜