国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java內存模型(JMM)和虛擬機(JVM)內存、GC

發(fā)布時(shí)間:2021-08-02 23:24 來(lái)源:網(wǎng)絡(luò )整理 閱讀:182 作者:mb6008e9b926b5d 欄目: web開(kāi)發(fā)

  概念:棧描述的是Java方法執行的內存模型,每個(gè)方法在被執行的時(shí)候都會(huì )創(chuàng )建一個(gè)自己的內存棧用于存放局部的變量等相關(guān)信息,存放的方式是逐個(gè)存放,所以這里有個(gè)棧先進(jìn)后出的過(guò)程。

?

  

?

  1.程序計數器

  3.堆

  

?

  volatile 用于保證可見(jiàn)性

Java內存模型(JMM)

  在面試過(guò)程中,關(guān)于Java的內存模型(側重于:Java的并發(fā)原理)和JVM的內存模型并不是同一個(gè)問(wèn)題,所以自己在通過(guò)查詢(xún)資料之后對相關(guān)的知識點(diǎn)進(jìn)行總結,如果有寫(xiě)得錯誤的地方,歡迎指出,也可以一起探討。

  再具體的關(guān)于CPU和內存之間的愛(ài)恨糾纏目前我就沒(méi)有在深入,感興趣的同學(xué)可以自己去了解一下

?

?

?

?

  目的:用于存儲已被虛擬機加載的類(lèi)信息、常量、靜態(tài)變量

  注意:為什么會(huì )有棧和堆之分:

  概念: 方法區和堆的概念比較類(lèi)似,就是所有線(xiàn)程共享的內存,為了和堆進(jìn)行區分,又被稱(chēng)為了“非堆”

  概念:堆是Java虛擬機中內存最大的一個(gè)塊內存區域,因為堆存放的對象是線(xiàn)程共享的,所以多線(xiàn)程的時(shí)候也需要同步機制。所有的對象實(shí)例及數組大多數都是在堆上分配內存,之所以不是都是這樣,原因在于JIT編譯器技術(shù)的成熟,這個(gè)說(shuō)法不是這么絕對了。

  4.方法區

JVM內存模型

  GC這邊我就不做詳細的介紹了,畢竟自己也在學(xué)習過(guò)程中,GC是可以拿出來(lái)講好久的內容,目前我還沒(méi)有進(jìn)行總結。

  基于計算機的內存設計結構,CPU在發(fā)展過(guò)程中,運行速度越來(lái)越快,內存的讀寫(xiě)速度跟不上CPU的運行速度,因此提出來(lái)“緩存” 的概念。CPU在讀寫(xiě)過(guò)程中,可以將數據先寫(xiě)入緩存中,然后緩存將數據刷新到主存中。因此,在多線(xiàn)程的場(chǎng)景下就會(huì )出現“緩存不一致的情況”,就是多個(gè)線(xiàn)程對同一個(gè)數據的緩存可能不一致。

··  Java內存模型就是一種符合內存模型規范的,屏蔽了各種硬件和操作系統的訪(fǎng)問(wèn)差異,保證了Java程序在各種平臺下對內存的訪(fǎng)問(wèn)都能保證其效果一致的機制和規范

  2.Java棧(虛擬機棧)

?

  目的:CPU在執行多線(xiàn)程任務(wù)時(shí),為了確保線(xiàn)程能夠正常切換到正確的執行位置,每個(gè)線(xiàn)程都有一個(gè)獨立的程序計數器,不同線(xiàn)程之間的程序計數器互不影響,獨立存儲。

?

  Java中提供了一系列和并發(fā)相關(guān)的關(guān)鍵字,比如:volatile、synchronized、final、concurren

  概念:程序計數器是一塊很小的內存空間,它是線(xiàn)程私有的,可以認作為當前線(xiàn)程的行號指示器。

  原子性:一個(gè)操作中CPU不能暫停、中斷,要么執行完成,要么不執行

     當方法執行完成之后,內存棧被銷(xiāo)毀,所以方法中定義的變量都是放置在內存棧中。

  5.本地方法棧

    當一個(gè)方法執行時(shí),每個(gè)方法都是建立自己的內存棧用于存放方法中定義的變量,在方法結束后進(jìn)行銷(xiāo)毀,但是在程序中創(chuàng )建一個(gè)對象時(shí),這個(gè)對象將被保存在堆中(也可以稱(chēng)為:運行時(shí)數據區,堆是其中的一部分),方便可以反復的使用,這是因為創(chuàng )建對象的成本通常會(huì )比較的大。既讓這樣,那么在堆內存的中的對象就不會(huì )隨著(zhù)方法的結束而銷(xiāo)毀,當這個(gè)對象被一個(gè)方法引用完了之后還可能被其他的引用變量使用,則這個(gè)對象就不會(huì )被銷(xiāo)毀。只有在一個(gè)對象沒(méi)有任何的引用變量引用他時(shí),系統的垃圾回收機制才會(huì )在合適的時(shí)候回收他(是不是聽(tīng)起來(lái)很熟悉,特別的像GC)

  synchronized 用于保證 原子性

  首先提一下三個(gè)概念,基本上內存模型就是為了解決這三個(gè)問(wèn)題

Java內存模型如何實(shí)現

?

?

  其實(shí)這些就是Java內存模型封裝在底層中實(shí)現后提供給程序員使用的關(guān)鍵字

  本文的重點(diǎn)在于了解JMM,所以不會(huì )對相關(guān)的關(guān)鍵字進(jìn)行詳細的介紹?。。?!

  注意:如果線(xiàn)程執行的是個(gè)java方法,那么計數器記錄虛擬機字節碼指令的地址。如果為native【底層方法】,那么計數器為空。這塊內存區域是虛擬機規范中唯一沒(méi)有OutOfMemoryError的區域

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

ja
色综合久久久无码网中文| 成熟丰满熟妇高潮XXXXX| 无码AV免费网站| 久久人妻无码中文字幕| 我半夜摸妺妺的奶C了她软件| 成人试看30分钟免费视频|