JVM虚拟机内存模型

Java内存模型JVM

并发处理的广泛应用是Amdahl定律代替摩尔定律 成为计算机性能发展动力的根本原因

为什么要有高并发

多线程是现代计算机操作系统中几乎已经是一项必备功能

1、计算计算机运算能力清大

2、运算速度与存储和子系统的速度差距太大

3、大量的时间都花在磁盘I/O 网路络通信和数据库访问上

如果不希望处理器大部分时间都处于等待其他资源的空闲状态 就必须使用一些手段去把处理器的运算能力压榨出来否则就会造成很大的性能浪费

衡量一个服务性能高低好坏每秒事务处理数 是重要指标之一 计算量相同的的任务 程序线程并发协调有条不紊 效率越来越高 线程之间频繁争用 相互阻塞甚至死锁 将会大大降低程序的并发能力

硬件的效率与一致性

处理器至少要与内存交互 读取运算数据 存储运算数据 这个I/O操作就是很难消除即无法仅靠寄存器来完成所有的运算任务

由于计算机的存储设备与处理的运算速度有着几个数量级的差距 所以现代计算机系统都不得不加入一层或多层读写数据尽可能接近处理器运算速度的高速缓存 来作为内存与处理器之间的缓冲 将运算需要的数据复制到缓冲中 让运算快熟进行 当运算结束后再从缓存同步内存之中

在多路处理器系统中 每个处理器都有自己告诉缓存 而他们又共享同一个主内存 这种内存称之为共享内存多核系统

在这里插入图片描述

除了增加高速缓存之外 为了使处理器内部的运算单元能尽量被充分利用处理器可能会对输入代码进行乱排序执行(out-of-order Execution)优化 处理器会在计算之后将乱序执行进行

主内存与工作内存

Java内存的模型的主要目的是定义程序中各种变量的访问规则

Java内存模型规定了所有的变量都存储在主内存中。

每条线程又自己工作的内存 线程的工作内存保存了被改线程使用对的变量的主内存副本,

线程对变量的所有的操作必须在工作内存中进行,而不能直接读写主内存中数据 不同的线程之间也无法直接访问对方工作内存中的变量

线程间变量的传递需要通过主内存来完成

在这里插入图片描述

内存间交互操作

Java虚拟机保证内存操作每一项都是原子的不可再分的 对于doule long 可以分开 64x86 用32运算可以分成两步来进行操作

lock锁定 作用于主内存额变量 把一个变量标识为一条线程独占状态

unlock 作用主内存的变量 把一个处于锁定状态的变量释放出来 释放后的变量才可以被其他线程锁定

read 作用主内存的变量 把一个变量从主内存传输到线程的工作内存中 以便load操作

load 作用工作内存的变量把一个变量的值放入工作内存的变量副本中

use 作用工作内存的变量 把工作内存的变量的值传递给执行引擎 每当虚拟机遇到一个需要使用变量的值字节码指令时将会执行这个操作

assign 作用域工作内存变量 把一个执行引擎接收到的值赋值给工作内存的变量 每当虚拟机遇到一个给变量赋值的字节码指令时 执行该操作

store 作用 于工作内存的变量 把工作内存中一个变量值传到主内存中 以便随后write擦欧总

write 及作用于只能没存变量 把store操作内存值得到变量放入到主内存的变量中

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值