再有人問你Java內存模型是什麼,就把這篇文章發給他!

前幾天,發了一篇文章,介紹了一下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技術了吧,總不能讓內存成爲計算機處理的瓶頸吧。

相關文章
相關標籤/搜索