0
点赞
收藏
分享

微信扫一扫

JMM(Java内存模型)浅记

JMM(Java内存模型)

概念:

JMM是抽象的概念,是一种规范。JMM规定内存分为主内存和工作内存,其中主内存用来存储所有变量,工作内存需要对变量进行操作时,需要将主内存中变量拷贝到线程自己的工作内存中,完成所需操作之后,再将数据写回主内存。

目的:

解决各线程的工作内存数据不一致、编译器优化和指令重排的问题。

有如下三个特性:

  • 可见性
  • 原子性
  • 有序性

可见性:

当一个线程将数据写回主内存时,其他线程也更新自己工作内存中的数据,保证和主内存中的数据一致。即一个线程修改了数据,其他线程也看的见,这就是所谓的可见性。

原子性:

类似于事务中的原子性,要么全部执行成功,要么全部执行失败。

有序性:

在数据没有依赖性的时候,编译器会进行指令重排,有时候会导致结果不符合预期,为了得到正确的结果,这就要需要保证指令有序的执行。

拓展:

java 关键字中,volatile是一个轻量级的同步机制,保证了可见性和有序性,但是不保证原子性。而 synchronized 关键字是一把重型锁,会影响性能,但是它保证 JMM 规范中的可见性、原子性和有序性。

注意:

区分 JVM运行数据区、JMM(Java内存模型)和 Java 对象模型。

举报

相关推荐

0 条评论