Java内存模型【JMM】、JVM内存模型

1 、Java 内存模型(JMM, Java Memory Model)

1-1、有什么用 ?

  • 定义多线程环境下,线程如何以及何时能看到其他线程修改的共享变量的值,以及如何同步访问共享变量。

  • 它是规范(Specification),不是具体实现。

  • 它关注的是 可见性、有序性、原子性 ------ 即并发编程中的三大问题。

1-2、核心内容

  • 所有变量都存储在主内存(Main Memory)中;
  • 每个线程有自己的工作内存(Working Memory),保存该线程用到的变量的副本;
  • 线程对变量的所有操作(读、写)都必须在工作内存中进行,不能直接读写主内存;
  • 不同线程之间无法直接访问对方的工作内存,变量值的传递必须通过主内存完成。

1-3、 关键机制:

  • volatile:保证可见性和禁止指令重排序;
  • synchronized / Lock:保证原子性、可见性、有序性;
  • final:安全发布不可变对象;
  • happens-before 原则:定义操作之间的内存可见性顺序。

2、JVM 内存模型(JVM Runtime Data Areas)

2-1、有什么用?

  • 描述 JVM 在运行 Java 程序时,内部是如何划分内存区域的。

  • 它是运行时数据区的结构描述,属于 JVM 实现层面的概念。

  • 它关注的是 对象、方法、栈帧、类信息等存放在哪里。



相关推荐
kaikaile19956 分钟前
风、浪、流环境模型的船舶三自由度(纵荡、横荡、艏摇)运动仿真MATLAB
开发语言·人工智能·matlab
fish_xk7 分钟前
map和set
java·开发语言
李崧正22 分钟前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命24 分钟前
鳶尾花項目JAVA
java·开发语言·机器学习
BIGmustang25 分钟前
python练手之用tkinter写一个计算器
开发语言·python
二哈赛车手30 分钟前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
winner888133 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI人工智能+电脑小能手42 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
bzmK1DTbd1 小时前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则
AI进化营-智能译站1 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人