JUC
JUC Java 内存模型之 JMM

面试题

  • 你知道什么是 Java 内存模型JMM吗?
  • JMM 与 volatile 它们两个之间的关系?
  • JMM 有哪些特性或者它的三大特性是什么?
  • 为什么要有 JMM,它为什么出现?作用和功能是什么?
  • happens-before 先行发生原则你有了解过吗?

为什么需要 JMM

因为计算机有多级缓存(CPU 和物理主存的速度不一致),CPU 的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题

Java 虚拟机规范中试图定义一种 Java 内存模型(java Memory Model,简称 JMM) 来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。

Java 内存模型 Java Memory Model

JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见,关键技术点都是围绕多线程的原子性、可见性和有序性展开的。

  • 原则

    • JMM的关键技术点都是围绕多线程的原子性、可见性和有序性
  • 作用

    • 通过JMM来实现线程和主内存之间的抽象关系。

    • 屏蔽各个硬件平台操作系统的内存访问差异以实现让Java程序在各种平台下都能达到一致的内存访问效果。

JMM规范下,三大特性 JMM规范下,多线程对变量的读写过程 JMM规范下,多线程先行发生原则之happens-before