前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有不少小伙伴反馈但愿能够深刻的讲解下每一个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的一个,并且涉及到不少背景知识和相关知识。编程
网上有不少关于Java内存模型的文章,在《深刻理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。可是,不少人读完以后仍是搞不清楚,甚至有的人说本身更懵了。本文,就来总体的介绍一下Java内存模型,目的很简单,让你读完本文之后,就知道到底Java内存模型是什么,为何要有Java内存模型,Java内存模型解决了什么问题等。缓存
本文中,有不少定义和说法,都是笔者本身理解后定义出来的。但愿可以让读者能够对Java内存模型有更加清晰的认识。固然,若有偏颇,欢迎指正。并发
为何要有内存模型对象
在介绍Java内存模型以前,先来看一下到底什么是计算机内存模型,而后再来看Java内存模型在计算机内存模型的基础上作了哪些事情。要说计算机的内存模型,就要说一下一段古老的历史,看一下为何要有内存模型。内存
内存模型,英文名Memory Model,他是一个很老的老古董了。他是与计算机硬件有关的一个概念。那么我先给你介绍下他和硬件到底有啥关系。get
CPU和缓存一致性虚拟机
咱们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。效率
刚开始,还相安无事的,可是随着CPU技术的发展,CPU的执行速度愈来愈快。而因为内存的技术并无太大的变化,因此从内存中读取和写入数据的过程和CPU的执行速度比起来差距就会愈来愈大,这就致使CPU每次操做内存都要耗费不少等待时间。基础
这就像一家创业公司,刚开始,创始人和员工之间工做关系其乐融融,可是随着创始人的能力和野心愈来愈大,逐渐和员工之间出现了差距,普通员工原来越跟不上CEO的脚步。老板的每个命令,传到到基层员工以后,因为基层员工的理解能力、执行能力的欠缺,就会耗费不少时间。这也就无形中拖慢了整家公司的工做效率。硬件
但是,不能由于内存的读写速度慢,就不发展CPU技术了吧,总不能让内存成为计算机处理的瓶颈吧。