深入理解JAVA內(nèi)存模型從最基礎(chǔ)、排版、jmm設(shè)計(jì)等多方面為大家講訴模型的建立和使用,全書共分為五大部分,圍繞內(nèi)存管理、執(zhí)行子系統(tǒng)、程序編譯與優(yōu)化、高效并發(fā)等核心主題對JVM進(jìn)行了全面而深入的分析,深刻揭示了JVM的工作原理!
內(nèi)容概括
第1部分,基本概念
包括“并發(fā)、同步、主內(nèi)存、本地內(nèi)存、重排序、內(nèi)存屏障、happensbefore規(guī)則、as-if-serial規(guī)則、數(shù)據(jù)依賴性、順序一致性模型、JMM的含義和意義”。
第2部分,同步機(jī)制
該部分中就介紹了“同步”的3種方式:volatile、鎖、final。對于每一種方式,從該方式的“特性”、“建立的happensbefore關(guān)系”、“對應(yīng)的內(nèi)存語義”、“實(shí)現(xiàn)方式”等幾個(gè)方面進(jìn)行了分析說明。實(shí)際上,JMM保證“如果程序正確同步,則執(zhí)行結(jié)果與順序一致性內(nèi)存模型的結(jié)果相同”的機(jī)制;而這部分這是確保程序正確同步的機(jī)制。
深入理解java<a href=虛擬機(jī)" src="http://pic.xz7.com/upload/2017-8/201783174927431530.png" width="403" height="525"/>
第3部分,JMM總結(jié)
JMM保證:如果程序是正確同步的,程序的執(zhí)行將具有順序一致性。
從JMM設(shè)計(jì)者的角度來說,在設(shè)計(jì)JMM時(shí),需要考慮兩個(gè)關(guān)鍵因素:
(01)程序員對內(nèi)存模型的使用。程序員希望內(nèi)存模型易于理解,易于編程。程序員希望基于一個(gè)強(qiáng)內(nèi)存模型(程序盡可能的順序執(zhí)行)來編寫代碼。
(02)編譯器和處理器對內(nèi)存模型的實(shí)現(xiàn)。編譯器和處理器希望內(nèi)存模型對它們的束縛越少越好,這樣它們就可以做盡可能多的優(yōu)化(對程序重排序,做盡可能多的并發(fā))來提高性能。編譯器和處理器希望實(shí)現(xiàn)一個(gè)弱內(nèi)存模型。
JMM設(shè)計(jì)就需要在這兩者之間作出協(xié)調(diào)。JMM對程序采取了不同的策略:
(01)對于會改變程序執(zhí)行結(jié)果的重排序,JMM要求編譯器和處理器必須禁止這種重排序。
(02)對于不會改變程序執(zhí)行結(jié)果的重排序,JMM對編譯器和處理器不作要求(JMM允許這種重排序)。
深入理解java內(nèi)存模型電子書目錄
深入理解java內(nèi)存模型(一)——基礎(chǔ)
深入理解java內(nèi)存模型(二)——重排序
深入理解java內(nèi)存模型(三)——順序一致性
深入理解java內(nèi)存模型(四)——volatile
深入理解java內(nèi)存模型(五)——鎖
深入理解java內(nèi)存模型(六)——final
深入理解java內(nèi)存模型(七)——總結(jié)