Java内存模型(Jmm)系列之————什么是Java内存模型

Java内存模型是一个老生常谈的问题 ,是大厂面试中绕不过的,不仅中级和高级程序员面试甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着。网上已经有大量的博客,但是人家的终究是人家的,自己也要好好的去理解,去消化。那么,到底Java内存模型是何方神圣呢?废话不多说,往下戳戳戳!

        Java内存模型    即Java Memory Model,简称JMM。(JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。)它就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。本文所提到Java内存模型,指的是JDK 5 开始使用的新的内存模型,(现在的Java8仍沿用了Java1.5的版本)主要由JSR-133: JavaTM Memory Model and Thread Specification 描述。

         为何要了解它?熟读它,深知它?(敲黑板!!!)大多数朋友是不是都内心呐喊了,甚至振臂高呼起来:为了面试!但咱能不能高大上一点啊,这样多LOW啊!咱这是为了提升自我修养!!!(吁。。。。。大佬轻拍)其实,熟知Jmm是为了以后的并发编程,它是并发编程的萌芽!如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。

         了 解Java多线程的朋友都知道,在Java中提供了一系列和并发处理相关的关键字,比如volatile、synchronized、final、concurren包等。其实这些就是Java内存模型封装了底层的实现后提供给程序员使用的一些关键字。
         在并发编程领域,有两个关键问题:线程之间的通信和同步Java内存模型的存在就是解决他们的。JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

           好了,JMM概念就介绍到这里,最后再总结一下:JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。

                          下节,我们将正式走进java内存模型的世界!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值