JMM介绍

博客围绕Java相关知识,涉及JVM和JMM。JVM是Java程序运行的基础,JMM则为Java内存模型,保障多线程环境下内存访问的正确性,这些都是Java技术体系中的重要内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### Java内存模型 (JMM) 介绍 #### 主要概念 Java内存模型(JMM, Java Memory Model)定义了多线程环境下如何处理共享数据的一系列规则,确保不同平台上的Java程序能够一致地执行[^1]。具体来说: - **主存与工作内存**:JMM引入了两个重要概念—主存和工作内存。其中,所有变量都存储于主存之中;每个线程都有自己的工作内存,保存该线程使用的局部变量副本。 #### 数据特性保障 为了支持并发编程的安全性和效率,JMM提供了三大核心属性的保证: - **可见性**:当一个线程修改了一个共享变量之后,其他线程能立即看到这一变化。例如,`volatile`关键字可用来增强特定字段的可见性[^5]。 - **有序性**:通常情况下,编译器会按照源码顺序执行指令,但在某些场景下可能会重排序以提高性能。然而,对于存在依赖关系的操作,则需遵循严格的先后次序来维护逻辑正确性。可以通过使用`synchronized`或显式的锁机制防止不必要的指令重排。 - **原子性**:指基本操作不可再分的整体性质。虽然大多数单条语句都是天然具备原子性的,但对于复合动作如读改写序列,则可能需要额外同步手段加以保护,比如利用内置锁定(`synchronized`) 或者高级别的并发工具类[^4]。 #### 抽象层面的区别 值得注意的是,尽管术语上有交集,但JMM所描述的内容不同于具体的JVM运行时结构(如栈、堆)。后者属于物理布局范畴,而前者侧重于规定跨线程交互的行为准则及其效果[^2]。 ```java // 使用 volatile 关键字确保可见性 public class VisibilityExample { private static volatile boolean ready; public void writer() { ready = true; // 修改状态 } public void reader() { while (!ready) { /* 等待 */ } System.out.println("Ready!"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值