- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 内存模型与线程
2021-08-10
前言
并发是计算机进展的成就。(并发,同一时段发生;并行,同一时辰发生)
我们晓得,晚期计算机只能串行的进行运转(最陈旧的打孔)。而经过多年的进展,计算机可以“同时”做很多事情。但悲剧的是,由于CPU速度和其它设备之间的速度差别太大,比如磁盘IO、网络传输、数据库访问等等,假如不期望CPU在进行这些操作时一直处于等待的形态,就要充分压榨它的功能让它干别的事情。
目前在服务器端,衡量一个服务功能的凹凸好坏,每秒事务处理数(Transactions Per Second,TPS)是最重要的目标之一,它代表一秒内服务器端平均能响应的恳求总数,而TPS的值与程序的并发力量又有格外亲密的关系。对于计算量相同的程序,线程并发设计的越好,效率自然越高;反之,线程间的频繁堵塞甚至死锁,将会大大降低程序的并发力量。可见,并发是一个格外值得争辩的问题。Java对并发进行了各种底层封装,使得程序员可以专注于业务规律而不必纠缠于这些简单的细节。但是无论言语、两头件和框架如何优化,我们都不能100%保证它们能完善的处理并发问题,了解并发的内幕则是合格程序员的必经之路。
高效并发是《深化理解Java虚拟机》的最终一部分,将引见虚拟机如何实现多线程、多线程之间由于共享和竞争数据而导致的一系列问题及处理方案。
一、硬件的效率与全都性
假如学过操作系统,这一块就很简约理解了。我们晓得,计算机的执行速度是一个正三角模型,依次为:
CPU - 高速缓存 - 内存 - 外存
所以,要实现计算机并发执行多个任务和充分利用计算机CPU的功能就不是那么简约了。由于CPU和内存、外存的速度差别太大(跨越N个数量级),所以提出了高速缓存的概念。高速缓存是读写速度尽可能接近CPU运算速度的存储区域,它作为内存与CPU之间的缓冲:将运算需要使用到的数据复制到缓存中,让CPU进行运算,当运算计算后再从缓存同步到内存中,这样就无须等待缓慢的内存读写了。
引入高速缓存很好的处理了CPU与其它存储单元速度差异太大的问题,但同时也引入了新的问题——缓存全都性。在多CPU机器上,每个CPU都有本人的高速缓存,而它们又共享一个主内存,当多个CPU的运算任务都涉及内存的同一块区域时,就可能导致缓存不全都的情况,假如真是这样,那同步回内存的缓存以谁的数据为主呢?为了处理这个问题,需要各个CPU访问缓存时恪守肯定的协议,比如MSI、MESI、MOSI等等。
整个过程可以用下图说明:
二、Java内存模型
首先最重要的一点是要晓得为什么要有Java内存模型。
Java虚拟机规范定义了Java内存模型(Java Memory Model,JMM)来实现屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到全都的并发效果。要抓住重点:屏蔽硬件差异,保证并发。而程序的功能就是数据流的交互,所以保证数据的快速、正确访问就是Java内存模型的核心。
在此之前,C/C++直接使用物理硬件(或者说是操作系统的内存模型),因而会导致不同平台、不同操作系统的差异:在一个平台上并发完全正常,到了另一个平台可能程序就会经常出错。因而还得针对不同的平台开发不同的C/C++版本。而Java为了实现平台无关性(Write Once,Run Anywhere),就定义了JMM。但是定义一个MM绝非易事:
(1) 必需足够严谨:这样才能保证Java的兵法操作不会产生歧义
(2) 必需足够宽松:使JVM的实现可以有足够的自在空间去利用硬件的各种特性(寄存器、高速缓存等)来猎取更好的执行速度
1. 主内存与工作内存
Java内存模型的次要目标是定义程序中各个变量的访问规章,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量和Java程序中的变量略有区分,它包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量和方法参数,由于它们是线程私有的,不会被共享,自然不存在竞争问题。(JVM堆中的数据,是多线程共享的)
Java内存模型规定了全部的变量存储在JVM的主内存中。每条线程还有本人的工作内存(类比高速缓存)。线程工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的全部操作(读取、赋值等)都必需在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间的工作内存也是相互独立的,线程间变量值传递均需要主内存完成。线程、主内存、工作内存之间的关系如下图所示:
2. 内存间交互操作
关于主内存和工作内存之间的消息,次要是“主 - 工作”和“工作 - 主”,JMM定义了8种操作:
(1) lock:作用于主内存的变量,把一个变量标识为一条线程独占的形态
(2) unlock:作用于主内存的变量,把一个lock的变
您可能关注的文档
最近下载
- 《趣味的手工创意--向日葵》-美术课件.ppt VIP
- 派出所民警先进事迹材料三篇 .doc VIP
- VIVITEK丽讯RU76953使用说明书.pdf VIP
- 原调正谱bE边疆的泉水清又纯钢琴伴奏联考.pdf VIP
- 泳池工程施工设计方案(3篇).docx VIP
- 少儿水粉 玫瑰庄园—美术课件.pptx VIP
- (一模)贵阳市2025年高三年级适应性考试(一)地理试卷(含官方答案).docx
- 《模型构建在高中生物教学中的应用研究》课题研究方案.doc
- 精品解析:四川省成都市武侯区2024-2025学年上学期八年级期末考试数学试题(原卷版).docx VIP
- 苏J9508室外工程-标准设计图集.pdf VIP
文档评论(0)