面试题:Java 内存结构与内存模型
面试 Java JVM 大约 894 字注意
内存结构与内存模型常常混淆
Java 内存结构
又称JVM
内存结构
The Structure of the Java Virtual Machine
Java 执行流程
- ->
Java
源代码文件(.java
) - ->
Java
编译器 - ->
Java
字节码文件(.class
) - ->
ClassLoader
类加载器 - ->
Runtime Data Area
运行时数据区
Runtime Data Area
示意图:
对象和类存储的3个内存区域
对象和类的数据存储在3
个不同的内存区域:堆(Heap Space
)、方法区(Method Area
)、本地区(Native Area
)
Java内存模型
Java 内存模型简称 JMM,它定义了一个线程对另一个线程是可见的,另外就是共享变量的概念,因为 Java 内存模型又叫做共享内存模型,也就是多个线程会同时访问一个变量,这个变量又叫做共享变量,共享变量是存放在主内存中的,而且每一个线程都有自己的本地私有内存,如果有多个线程同时去访问一个变量的时候,可能出现的情况就是一个线程的本地内存中的数据没有及时刷新到主内存中,从而出现线程的安全问题。在 Java 当中,共享变量是存放在堆内存中的,而对于局部变量等是不会在线程之间共享的,他们不会有内存可见性问题,当然就不会受到内存模型的影响。
内存模型解决并发问题主要采用两种方式: 限制处理器优化和使用内存屏障。
Java
的多线程之间是通过共享内存进行通信的, 而由于采用共享内存进行通信, 在通信过程中会存在一系列如可见性、原子性、顺序性等问题, 而JMM
(Java Memory Model
)就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。它只是一个抽象的概念, 是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java
程序在各种平台下对内存的访问都能保证效果一致的机制及规范。JMM
定义了一些语法集, 这些语法集映射到Java
语言中就是volatile
、synchronized
等关键字。
示意图:
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

-
使用 jsDelivr 解决 GitHub 资源下载慢的问题阅读 407
-
Linux 常用命令之内存相关命令阅读 1766
-
Elasticsearch 插入数据 PUT阅读 2645
-
OpenJDK 与 AdoptOpenJDK 的区别阅读 1157
-
SQL 删除重复数据保留最新的一条阅读 1429
-
Docker 部署 Kibana阅读 816
-
JavaScript 展开语法(三个点 ...)阅读 488
-
Docker 部署 pgAdmin4阅读 133
-
Redis 执行 Lua 脚本抛出 StatusOutput does not support set(long) 异常阅读 6604
-
PostgreSQL下载安装及运行阅读 3118