最近对Java内存模型比较感兴趣,跟着程晓明的深入理解Java内存模型学习了下,查阅地址为:
http://ifeve.com/java-memory-model-1/#header
基本模型:
1、线程之间的通信有两种:共享内存和消息传递,Java使用的是共享内存的形式进行通信
2、Java中,局部变量,方法定义参数不会被共享,所以不会有可见性的问题,存放在堆内存的变量才会被共享,会有可见性问题
3、Java内存模型(简称JMM)定义了线程和主线程的关系,
每个线程都有一个缓冲池,线程之间通信的过程为:A线程把本地内存池的信息刷新到主内存中,B线程到主内存中取数据,并更新自己的本地内存数据
重排序:
1、编译器和处理器会对指令做重排序来提高性能
2、现代的处理器会支持多种不同的重排序;
3、JMM会通过禁止特定类型的编译器重排序和处理器重排序,为程序提供一定的可见性
happens before
1、单线程内,a指令在b之前,a对b可见
2、对一个锁,解锁对随后的加锁可见
3、volatile变量的写,对之后此变量的读可见
4、传递性,a指令先于b,b先于c,那么a指令对c可见
注意:当两个操作有happens before关系,不一定第一个操作一定在第二个操作之前执行,仅仅是第一个操作的结果对第二个操作可见
分享到:
相关推荐
深入理解Java虚拟机学习笔记借鉴.pdf
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
深入理解LINUX内存管理学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
《深入理解LINUX内存管理》学习笔记b.PDF
《深入理解LINUX内存管理》学习笔记a.PDF
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
一个java基础项目(学习笔记).zip一个java基础项目(学习笔记).zip一个java基础项目(学习笔记).zip一个java基础项目(学习笔记).zip一个java基础项目(学习笔记).zip一个java基础项目(学习笔记).zip一个java基础项目...
Java JDK 7学习笔记 PDF
Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解 Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记
狂神说java学习笔记,markdown版
《深入理解LINUX内存管理》学习笔记c.PDF
java李兴华学习笔记之JAVASE基础部分.pdf
一名java培训生的学习笔记(基础部分1)一名java培训生的学习笔记(基础部分1)
《深入理解linux内存管理》学习笔记 Linux 高阶学习
JVM深入理解Java虚拟机 - 学习笔记
[奥莱理] Java 8 Lambdas 学习笔记 [奥莱理] Java 8 Lambdas 学习笔记 [奥莱理] Java 8 Lambdas 学习笔记 [奥莱理] Java 8 Lambdas 学习笔记 [奥莱理] Java 8 Lambdas 学习笔记 [奥莱理] Java 8 Lambdas 学习笔记 ...
《深入理解LINUX内存管理》学习笔记,亲生体会,详细记录