日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Object o = new Object()在内存中占几个字节

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Object o = new Object()在内存中占几个字节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CAS:

Compare and Swap,即比較再交換。

jdk5增加了并發包java.util.concurrent.*,其下面的類使用CAS算法實現了區別于synchronouse同步鎖的一種樂觀鎖。JDK 5之前Java語言是靠synchronized關鍵字保證同步的,這是一種獨占鎖,也是是悲觀鎖。

?

?

?

?CAS算法理解

對CAS的理解,CAS是一種無鎖算法,CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做.

?

查看對象在內存中的布局:

引入依賴

<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version></dependency>

?

?

對象在內存中的布共分為四部分:

?

?

對象在內存中的布共分為四部分:

  • Markword:主要存儲鎖的信息和GC的信息,占8個字節

  • 類型指針class pointer :指向這個類在內存中的Class對象,占4個字節

  • 實例數據 instance data : 這個類中實例對象所占的內存,如果int a 則占4個字節,如果時long b,則占8個字節

  • 對齊padding:如果前邊幾個加起來的字節數不是8的整數倍,則填充補齊

    所以Object o = new Object();在內存中共占用8+4+0+4共16個字節

  • ?

    ?

    ?

    ?

    ?

    ?

    鎖的升級:鎖的信息記錄在markword中.
    • Object o = new Object();在對象剛剛被new出來時,沒有加任何鎖.用markdown中最低三位代表鎖狀態,其中一位是偏向鎖位,兩位是鎖標志位

    • 此時線程A訪問該對象,因為A是第一個訪問該對象的線程,此時沒有其它線程競爭,o的markword的前54位指向了當前線程,此時為偏向鎖.

    • 當線程A添加了偏向鎖之后,線程B也來訪問o對象,A,B兩個線程競爭.這兩個線程分別在各自的線程棧中生成一個Lock Record,以CAS的方式對o競爭加鎖,假設A成功,則o的markword指向線程A的Lock Record,線程B處于自旋狀態.此時o上添加的是輕量級鎖也叫自旋鎖,也叫無鎖.

    • 當線程B自選次數超過10次,則向操作系統內核態申請重量級鎖資源

    ?

    ?

    總結

    以上是生活随笔為你收集整理的Object o = new Object()在内存中占几个字节的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。