`
illidantorch
  • 浏览: 14626 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

<深入理解Java内存模型>读后感

 
阅读更多
多核运行的环境下,由于每个CPU都有自己的读写缓存,导致的是一个线程上写的内容,不一定在另一个线程里可见。

JMM(Java memory model)做为语言级别的内存模型,为程序员提供易于理解的内存模型(通过volatie和锁机制,在编译的时候插入内存屏障,限制处理器的指令重排),同时尽量放松对处理器指令重排的限制(处理器重排指令,是为了更好利用处理器的缓存,提升效率).

Break it down:

1. volatile:

   1.1 对volatile变量的读写,都等价于加了锁的操作

   1.2 对volatile变量的写,相当于释放锁; 对volatile变量的读,相当与获取锁.

       原因:对volatile变量的写,会把处理器写缓存的数据写到主内存
            对volatile变量的读,之前会从主内存中读入数据到处理器缓存

       所以保证了:如果volatile变量的写在volatile变量的读之前,那么volatile写之前包括对volatie变量的写操作,对volatile变量的读和之后的操作可见

2. 锁

   通过volatile变量+CAS操作,构建出一套程序员易于编程的多线程同步工具。

   (java的lock不是busy wait的,应该是sleep的。 回忆unix网络编程第二卷:进程间通信, mutex是需要不断轮询的,condition是可以睡在上面和唤醒的,可以用mutex+condition实现锁)

3. final

   主要是对final变量的初始化,和包含它的构造函数,限制重排序(以加入内存屏障的方式)。以达到如果对象的引用可用,那么final变量一定是被正确初始化了的。


参考:
http://ifeve.com/java-memory-model-0/
分享到:
评论

相关推荐

    深入理解Java内存模型 pdf 超清版

    深入理解Java内存模型对于编写高效的并发程序至关重要。本文将详细介绍JMM的核心概念、工作原理以及相关的编程实践。 1. **核心概念** - **线程私有区域**: 包括程序计数器、虚拟机栈、本地方法栈,这些区域中的...

    深入理解 Java 内存模型

    《深入理解 Java 内存模型》这本书由程晓明编著,旨在帮助开发者深入理解和应用 JMM。 1. **内存层次结构**:Java 内存模型将内存分为堆内存、栈内存、方法区(在 Java 8 及以后版本中被元空间替代)和程序计数器等...

    深入理解java内存模型

    这本书"深入理解Java内存模型"显然是为了帮助读者深入探讨这个主题,以便更好地理解和解决并发编程中的问题。 Java内存模型主要涉及以下几个核心概念: 1. **主内存**:所有线程共享的数据存储区域,包括类的静态...

    深入理解Java内存模型

    在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的基础知识,理解重排序和顺序一致性,以及volatile关键字的相关知识点。 首先,让我们探讨Java内存模型的基础知识。在并发...

    《深入理解JAVA内存模型》PDF

    Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main ...

    深入理解 Java 内存模型_程晓明_InfoQ_java_内存模型_

    深入理解Java内存模型可以帮助开发者避免并发编程中常见的问题,如数据竞争、死锁和活锁等。通过合理地使用同步机制,可以编写出高效且线程安全的代码,这对于大型分布式系统和高并发应用尤为重要。 总之,Java内存...

    <<java深入虚拟机>>

    - 深入理解GC日志,分析内存泄漏和性能瓶颈。 6. **编译与即时编译(JIT)** - Java代码在运行时可以被JIT编译为本地机器码,提高执行效率。 - HotSpot JVM中的C1和C2编译器分别负责轻量级和重量级的JIT编译。 ...

    深入理解java内存模型.pdf

    深入理解JAVA内存模型.pdf (高清版) 1.基础 2.重排序 3.顺序一致性 4.voltile 5.锁 6.FInal 7.总结。。。等等

    深入理解Java内存模型.程晓明(带书签文字版).pdf

    Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 程序顺序规则 15 重排序对多线程的影响 15 顺序一致性 19 数据竞争与顺序...

    深入理解Java内存模型(经典).rar

    在《深入理解Java内存模型(经典)》这本书中,作者可能详细探讨了JMM的原理、规则以及在实际编程中的应用,包括案例分析和最佳实践。通过阅读这本书,开发者可以更深入地掌握Java并发编程的核心技术,提高程序的...

    深入理解JAVA内存模型(高清完整版)

    本教程《深入理解JAVA内存模型》将带你深入探讨这一主题,尤其关注Java中的同步原语——synchronized、volatile和final。 首先,我们要了解JMM的基础结构。JMM规定了程序中各个线程如何访问和修改共享变量,包括主...

    Java 内存模型

    理解Java内存模型对于编写正确、高效的多线程程序至关重要。在Java 5之前,Java内存模型的描述比较模糊,为了提升多线程程序的可靠性,Java社区重新定义并强化了Java内存模型,该工作主要在JSR-133专家组的领导下...

    读深入理解JAVA内存模型整理的思维导图

    读深入理解JAVA内存模型整理的思维导图 本人记忆差,整理这个思维导图,相当于较认真的看了一遍,整个思维导图,基本上就是对原文的拷贝。 有了层级关系。和本人自己的一些理解。由于思维导图弄出来的图片大于100M了...

Global site tag (gtag.js) - Google Analytics