JMM、JVM、硬件关系

一、程序、进程、线程

  程序:为完成某一个任务而编写的代码。(静态的概念)。

  进程:程序的一次运行。(动态概念)

  线程:一个进程里面包含了一个或多个线程。(占有资源的独立概念)

二、JVM内存区域

  

  方法区:存放类信息,常量,static修饰类变量、JIT编译的一些信息。这里面的数据时所有线程共享的。

  Java堆区:实例对象(共享)

  VM stack:Java方法在运行的内存模型。

三、Java内存模型 JMM

  java内存模型是一种规范,而JVM内存模型是它的实现。像mvc和ssm的关系,mvc是一种思想,而ssm框架是真实的实现。

  

  1.主内存:存放共享的信息

  2.工作空间:存放私有信息,基本数据类型,会直接存放到工作内存中,引用地址也会存放在工作内存中,引用对象存放在堆中。

  3.工作过程:

    a.线程修改的是私有数据的话,直接在工作空间修改

    b.线程修改共享数据时,首先把数据复制到工作空间中,在工作空间中修改后,再刷新内存中的数据。

    c.查找数据时先在工作空间中去查找,如果在工作空间中没有,就从内存中去找。如果一个线程修改了数据,但还没有更新到内存中,然后另外一个线程去读这个数据,这时就会产生线程不安全的问题。

  4.JVM和JMM的关系

    工作空间就是线程私有的虚拟机栈。

四、硬件内存架构

  

  因为CPU相对与内存执行速度很快,出现执行速度不匹配问题,所以需要添加中间缓存,缓存的处理速度比内存快。  

  1.工作过程和JMM模型一样

  2.问题:缓存一致性问题

  3.解决方案:

    a.通过总线加锁 只能有一个CPU使用内存,其他CPU不能使用内存。 但这种方案降低了CPU的吞吐量。

    b.缓存上面缓存一致性协议(MESI)

      当CPU在catch中操作数据时,如果该数据是共享变量,数据在catch中读到寄存器中,进行修改后,并更新到内存数据,在修改数据时在硬件层面上有个信号值cache Line,将此置为无效,当其                        它cpu发现缓存无效时就直接从内存中读取数据。

  4.JMM和硬件内存架构关系

    

 

     JMM模型和硬件内存多对多关系,虽然硬件内存架构采用了缓存一致性问题,也会出现数据不一致问题。

  5.java线程与硬件处理器的关系

    

  Java内存模型的必要性:规范内存数据和工作空间数据的交互。

五、并发编程的三个重要特性

  原子性:不可分割

  可见性:线程只能操作自己工作空间的数据。

  有序性:程序中的顺序不一定时执行程序,因为会存在编译重排序,指令重排序

六、JMM对以上三个特征的保证

  1.JMM与原子性

    a.x=10,只是一个写操作,保证原子性

    b.使用Synchronized Lock的lock

  2.JMM与可见性

    a.volatile  :在JMM模型上实现MESI协议。

    b.使用Synchronized Lock的lock

  3.JMM与有序性

    a.volatile:锁定的位置不能变化

    b.Synchronized:

    c.Happens-before原则

      1)程序次序原则

      2)锁定原则:后一次枷锁必须等前一次加锁。

      3)volatile 原则,霸道原则

      4)传递原则:a----b----c   a----c

 

转载于:https://www.cnblogs.com/yongan/p/10581292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值