面试题:Java内存结构与内存模型

面试Java大约 897 字

内存结构与内存模型常常混淆

Java 内存结构

又称JVM内存结构

The Structure of the Java Virtual Machine

Java 执行流程

  1. -> Java 源代码文件(.java)
  2. -> Java 编译器
  3. -> Java 字节码文件(.class)
  4. -> ClassLoader 类加载器
  5. -> Runtime Data Area 运行时数据区

Java执行流程.png

Runtime Data Area

示意图:

Java内存结构.png

对象和类存储的3个内存区域

对象和类的数据存储在3个不同的内存区域:堆(Heap Space)、方法区(Method Area)、本地区(Native Area)

RuntimeDataArea.png

Java内存模型

Java 内存模型简称 JMM,它定义了一个线程对另一个线程是可见的,另外就是共享变量的概念,因为 Java 内存模型又叫做共享内存模型,也就是多个线程会同时访问一个变量,这个变量又叫做共享变量,共享变量是存放在主内存中的,而且每一个线程都有自己的本地私有内存,如果有多个线程同时去访问一个变量的时候,可能出现的情况就是一个线程的本地内存中的数据没有及时刷新到主内存中,从而出现线程的安全问题。在 Java 当中,共享变量是存放在堆内存中的,而对于局部变量等是不会在线程之间共享的,他们不会有内存可见性问题,当然就不会受到内存模型的影响。

内存模型解决并发问题主要采用两种方式: 限制处理器优化使用内存屏障

Java的多线程之间是通过共享内存进行通信的, 而由于采用共享内存进行通信, 在通信过程中会存在一系列如可见性、原子性、顺序性等问题, 而JMM(Java Memory Model)就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。它只是一个抽象的概念, 是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。JMM定义了一些语法集, 这些语法集映射到Java语言中就是volatile、synchronized等关键字。

示意图:

jmm.png

阅读 372 · 发布于 2019-06-16

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批