JMM定义、作用、三大特性()

JMM 三大特性JMM(Java内存模型 Java Memory Model) 本身是一种抽象的概念并不存在,仅仅是一组定义或规范,通过这组规范定义了程序中各个变量的访问方式,决定了线程对共享变量的写入何时对另一个线程可见,关键技术都是围绕多线程的可见性、原子性、有序性展开的作用:通过JMM实现了主内存和线程之间的抽象关系解决了各个硬件平台和操作系统内存访问差异,以实现Java程序在各个平台下都能达到一致访问的效果1. 可见性 :当一个线程更改了共享变量的值,其他线程能否立即知道共享变量发生了变更。JMM规定了共享变量存储在主内存中。系统主内存中共享变量被写入的时机不确定,多线程的环境下容易产生脏读。每个线程都有自己的工作内存,工作内存中保存了该线程使用变量的主内存副本拷贝,每个线程只能操作自己工作内存中的变量,不能直接读取主内存中的变量。不同线程不能直接访问对方工作内存中的变量,线程变量值的传递需要通过主内存来完成2. 原子性 :指同一个操作不能被打断,多线程的环境下,操作不能被其他线程干扰3. 有序性 :JAVA规范规定的JVM线程内部维持的顺序化语序,如果代码执行的最终结果与顺序执行的结果一致,那么指令执行的顺序与代码执行的顺序不一致 即指令重新排序优点: JVM 根据处理器特性对机器指令重排 使机器指令更符合CPU的执行顺序 ,最大限度的发挥了机器性能缺点:指令重排可以保证串行语义的一致,但不能保证多线程语义也一致

————————

JMM 三大特性JMM(Java内存模型 Java Memory Model) 本身是一种抽象的概念并不存在,仅仅是一组定义或规范,通过这组规范定义了程序中各个变量的访问方式,决定了线程对共享变量的写入何时对另一个线程可见,关键技术都是围绕多线程的可见性、原子性、有序性展开的作用:通过JMM实现了主内存和线程之间的抽象关系解决了各个硬件平台和操作系统内存访问差异,以实现Java程序在各个平台下都能达到一致访问的效果1. 可见性 :当一个线程更改了共享变量的值,其他线程能否立即知道共享变量发生了变更。JMM规定了共享变量存储在主内存中。系统主内存中共享变量被写入的时机不确定,多线程的环境下容易产生脏读。每个线程都有自己的工作内存,工作内存中保存了该线程使用变量的主内存副本拷贝,每个线程只能操作自己工作内存中的变量,不能直接读取主内存中的变量。不同线程不能直接访问对方工作内存中的变量,线程变量值的传递需要通过主内存来完成2. 原子性 :指同一个操作不能被打断,多线程的环境下,操作不能被其他线程干扰3. 有序性 :JAVA规范规定的JVM线程内部维持的顺序化语序,如果代码执行的最终结果与顺序执行的结果一致,那么指令执行的顺序与代码执行的顺序不一致 即指令重新排序优点: JVM 根据处理器特性对机器指令重排 使机器指令更符合CPU的执行顺序 ,最大限度的发挥了机器性能缺点:指令重排可以保证串行语义的一致,但不能保证多线程语义也一致