博客
关于我
JVM虚拟机深入理解----Java内存模型与线程(并发)
阅读量:710 次
发布时间:2019-03-17

本文共 783 字,大约阅读时间需要 2 分钟。

硬件效率与一致性

由于物理机遇到的并发问题与虚拟机中的情况有不少相似之处,因此物理机对于并发的处理方案对于虚拟机的并发处理有很大的参考意义。计算机的存储设备与处理器速度差距巨大,为了解决这一问题,我们在处理器与存储设备之间引入了高速缓存(Cache)。缓存的作用是将运算需要的数据存储在处理器中,等待处理器完成计算后,将结果返回缓存,再通过缓存存入到内存中。

然而,缓存带来了新的问题——缓存一致性问题。每个处理器都有自己的高速缓存,而所有处理器共享一个主内存。这种情况可能导致数据不一致。为了解决这一问题,我们引入了缓存一致性协议,包括MSI、MESI、MOSI等协议。

Java内存模型

Java虚拟机规范试图将Java内存模型适用于当前主流的硬件和操作系统,从而保证Java程序在各个平台下都能实现一致性的内存访问效果。

主内存与工作内存

Java内存模型定义了程序中变量的访问规则。变量可以是线程中的共享变量。在Java内存模型中,主内存与工作内存的概念与物理机中的主内存与高速缓存类似。主内存对应于Java堆中的对象实例数据部分,工作内存对应于虚拟机中的栈部分区域。

为了保证并发程序的正确性,Java引入了线程同步机制。最常用的同步机制是自旋锁。自旋锁的优点是减少了线程等待的时间,但也存在争夺锁的性能问题。为了更好地应对这一难题,Java引入了自适应自旋锁。

自旋锁与自适应自旋锁

传统自旋锁的缺点是如果争夺锁的时间很长,反而会浪费处理器资源。为了优化这一问题,Selfadel和"Nowik"提出了自适应自旋锁的概念。自适应自旋锁的核心思想是:根据之前锁的自旋时间和当前锁的状态,动态调节自旋等待的时间。

这种自适应机制能够更好地平衡资源浪费与性能损失,使得在多数情况下都能达到理想的性能。在实际应用中,自适应自旋锁在多线程场景中显示出了明显的优势。

转载地址:http://eybhz.baihongyu.com/

你可能感兴趣的文章
python基于flask搭建http服务(三)—— 使用gunicorn部署项目
查看>>
python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
查看>>
Python块键盘/鼠标输入
查看>>
python在心理学研究中的应用有哪些_心理学在线研究可用平台简介和应用进展
查看>>
python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
查看>>
python在gpu上运行_【python】python开启GPU加速
查看>>
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>
Python和RF编写web自动化
查看>>