码迷,mamicode.com
首页 > 编程语言 > 详细

JVM-Java内存模型-20200217

时间:2020-03-21 16:35:32      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:原子性   规则   trap   目的   thread   交换   自旋   有序性   一致性   

1:JMM其实是java虚拟机栈的一部分

2:主内存和工作内存:都属于Java虚拟机内存

技术图片

主内存:主要对应于JVM内存区域中的堆内存中的对象实例数据部分

工作内存:主要对应于JVM内存区域中的虚拟机栈中的部分区域

主内存与工作内存的数据交换操作的过程(通过总线bus通信,涉及总线嗅探机制及缓存一致性知识、MESI通信协议):

涉及八个原子操作:lock(锁定), unlock(解锁), read(读取), load(加载), use(使用), assign(赋值), store(存储), write(写入)

3:volatile 修饰的变量的特殊性

volatile 是虚拟机提供的最轻量级的同步机制;

被volatile修饰的变量将具备以下两种特性:

1)可见性:一个变量修改了这个变量的值时,所有共享此变量的线程都会立即知道

2)禁止指令重排序优化(机器级别语言-汇编):内存屏障概念

注:final修饰的字段在构造器种初始化成功后,对其他线程也可见

4:java 内存模型的特征:

1)原子性:某些操作是原子的

2)可见性:一个变量修改了这个变量的值时,所有共享此变量的线程都会立即知道

3)有序性:先行发生原则提供部分保障--操作A在B之前发生,则A产生的影响能被B观察到,影响包括修改了内存中共享变量的值、发送消息、调用方法等

  Java内存模型提供了8种默认的先行发生关系:

  1:程序次序规则  2:管程锁定规则  3:volatile变量规则  4:线程启动规则  5:线程终止规则  6:线程终端规则  7:对象终结规则 8:传递性

5:java线程安全实现方法:

1)互斥同步:互斥是方法,同步是目的--例如synchronized 和JUC并发包下的ReentrantLock [ri?‘entr?nt] (重入锁)

  ReentrantLock:等待可中断、可实现公平锁、以及锁可以绑定多个条件,JDK1.6以后他们的性能基本一样,更倾向于用synchronized实现。

2)非阻塞同步:乐观的并发策略--CAS操作(JDK1.5之后的包sun.misc.Unsafe类,启动类加载器(Bootstrap ClassLoader)加载的Class才能访问它;ABA问题)

3)无同步方案:不涉及数据共享的代码天生就是线程安全的--可重入代码和线程本地存储(java.lang.ThreadLocal类)

6:多线程锁优化

1)自旋锁与自适应锁   2)消除锁  3)粗化锁   4)轻量级锁     5)偏向锁

JVM-Java内存模型-20200217

标签:原子性   规则   trap   目的   thread   交换   自旋   有序性   一致性   

原文地址:https://www.cnblogs.com/xiaoma000deblog/p/12539716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!