JAVA内存模型(Java Memory Model)

        线程之间的通信,是通过共享内存和消息传递,所以线程之间的通信需要保证内存的可见性。(可见性,是指该线程对该内存的更改对其他线程的可见。)则为了保证内存的可见性,java定义了一套规则就是java内存模型。

      JMM定义了一套主内存与各个线程的抽象关系,线程之间的共享变量存储在主内存中,每个线程都有 自己的本地内存,线程通过拷贝主线程的共享变量到自己的本地内存作为一个副本,进行变量的操作,因为是通过副本进行操作就要使其具有可见性。关系图如下:


(此图从其他地方拷贝)

从上图中可以看到,线程的操作方式都是1,首先从主内存拷贝变量到自己的本地内存。2、修改完数据在把数据更新到主内存中。

这中间,要保存线程的可见性才不会使数据混乱。

   几个内存模型的一些词与知识点:

  重排序:为了提高程序性的性能,一般编译器和处理器都会对程序的指令做重排序。重排序又分为三种类别:编译器,指令级,内存系统。一般的程序都经过这三个重排序的顺序进行重排序。重排序可以保证最终结果的一致性。

      例如 : 

              x = 1;

             y  = 1 ;     

  可能执行的顺序是 y=1 ;x=1;这就是重排序,但是重排序会判断哪些语句可以重排序,哪些语句不可以重排序,并且会使用中间变量来保存数据。通过重排序来提高程序,性能。

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值