`
翟健
  • 浏览: 3519 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

深入理解Java内存模型的学习笔记一(基础)

阅读更多
最近对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关系,不一定第一个操作一定在第二个操作之前执行,仅仅是第一个操作的结果对第二个操作可见
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics