《深入理解java虚拟机》笔记6——高效并发

2019-01-23  本文已影响17人  Meandni

第五部分 高效并发

第十二章 Java内存模型与线程

并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。

12.1 概述

12.2 硬件的效率与一致性

12.3 Java内存模型

Java虚拟机规范中视图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。

12.3.1 主内存与工作内存

线程、主内存和工作内存的关系

12.3.2 内存间交互操作

关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步回主内存之类的实现细节,Java内存模型中定义了以下八种操作来完成,虚拟机实现时必须保证下面提及的每一种操作都是原子的、不可再分的(对于double和long类型的变量的某些操作在某些平台允许有例外):

基于理解难度和严谨性考虑,最新的JSR-133文档中,已经放弃采用这八种操作去定义Java内存模型的访问协议了,后面将会介绍一个等效判断原则 -- 先行发生原则,用来确定一个访问在并发环境下是否安全;

12.3.3 对于volatile型变量的特殊规则

12.3.4 对于long和double型变量的特殊规则

12.3.5 原子性、可见性与有序性

12.3.6 先行发生原则

12.4 Java与线程

12.4.1 线程的实现

12.4.2 Java线程调度

12.4.3 状态转换

线程状态转换关系

12.5 本章小结

本章我们首先了解了虚拟机Java内存模型的结构及操作,然后讲解了原子性、可见性、有序性在Java内存模型中的体现,最后介绍了先行发生原则的规则及使用。另外,我们还了解了线程在Java语言之中是如何实现的。

在本章主要介绍了虚拟机如何实现并发,而在下一章我们主要关注点将是虚拟机如何实现高效,以及虚拟机对我们编写的并发代码提供了什么样的优化手段。

第十三章 线程安全与锁优化

13.1 概述

13.2 线程安全

Brian Goetz对线程安全有一个比较恰当的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。

13.2.1 Java语言中的线程安全

13.2.2 线程安全的实现方法

13.3 锁优化

13.3.1 自旋锁与自适应自旋

13.3.2 锁消除

13.3.3 锁粗化

13.3.4 轻量级锁

HotSpot虚拟机对象头

13.3.5 偏向锁

偏向锁、轻量级锁的状态转化

本章小结

本章介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运行原理,并且介绍了虚拟机为了实现高效并发所采取的一系列锁优化措施。

参考资料

原文博客:

《深入理解java虚拟机》笔记6——高效并发

上一篇 下一篇

猜你喜欢

热点阅读