精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官問:Java中的new關鍵字做了什么事情?

開發 前端
1. 64位開啟指針壓縮的情況下,存放Class指針的空間大小是4字節,MarkWord是8字節,對象頭為12字節。數組長度4字節+數組對象頭8字節(對象引用4字節(未開啟指針壓縮的64位為8字節)+數組markword為4字節(64位未開啟指針壓縮的為8字節))+對齊4=16字節。

各位小伙伴,當我們new一個對象的時候,對象到底是怎么生產出來的呢,我們這篇說一說對象生成的過程和內存的分配機制,面試的時候可以扯一扯,絕對是加分項。

圖片圖片

1.加載類時檢查

虛擬機在執行的過程中,執行到new關鍵字(new關鍵詞、對象克隆、對象序列化等)的時候,第一步是先去檢查這個指令的參數對應的符號引用是否在常量池中,其對應的類是否已經被加載解析和初始化,如果已經有,就代表此類已經被加載過了,如果嗎,沒有就說明類還沒有被加載,那就要執行類記載的整個過程。

2.內存的分配

在類加載過程完成后,就要對新創建的對象進行分配內存的操作,那么對應所需要的內存具體大小是如何確定的呢,其實對象所需內存的大小在類加載完成后就可以完全確定了,虛擬機只需要在java堆中劃分出相應大小的固定的一塊內存空間即可。

但是在分配內存這個過程中有兩個問題:

  • 如何劃分內存。
  • 在并發情況下, 可能出現正在給對象A分配內存,指針還沒來得及修改,對象B又同時使用了原來的指針來分配內存的情況。虛擬機有兩種內存分配方法,一種是“指針碰撞”,一種是“空閑列表”,java默認采用的是指針碰撞,指針碰撞針對于規整的java堆,被使用的內存全都集中在堆的一邊,而另一邊都是空閑的內存,當需要分配固定大小的內存時候,只需要將內存的指針(分界點的指示器)從當前使用的位置向后挪動相應大小即可。當堆內存分配不是規整的時候,被使用的內存和沒有被使用的內存交錯相間,虛擬機很難找到一塊固定大小且連續的內存空間,這時候指針碰撞就很難發揮出作用,這個時候虛擬機采用的是空閑列表,空閑列表是用來維護哪些內存塊是空閑的,在進行分配內存的時候,只需要去空閑列表中找到一塊大小合適且連續的內存塊就可以了,然后再把這塊內存空間在空閑列表上更新其記錄。

解決并發問題的方法:

CAS(compare and swap): 虛擬機采用CAS配上失敗重試的方式保證更新操作的原子性來對分配內存空間的動作進行同步處理。

本地線程分配緩沖(Thread Local Allocation Buffer,TLAB): 把內存分配的動作按照線程劃分在不同的空間之中進行,即每個線程在Java堆中預先分配一小塊內存。

通過-XX:+/-UseTLAB參數來設定虛擬機是否使用TLAB(JVM會默認開啟-XX:+UseTLAB),-XX:TLABSize 指定TLAB大小。

3.初始化零值

內存分配完成后,虛擬機需要將分配到的內存空間都初始化為零值(不包括對象頭), 如果使用TLAB,這一工作過程也可以提前至TLAB分配時進行。這一步操作保證了對象的實例字段在Java代碼中可以不賦初始值就直接使用,程序能訪問到這些字段的數據類型所對應的零值。

4.設置對象頭

初始化零值之后,虛擬機要對對象進行必要的設置,例如這個對象是哪個類的實例、如何才能找到類的元數據信息、對象的哈希碼、對象的GC分代年齡等信息。這些信息存放在對象的對象頭Object Header之中。

在HotSpot虛擬機中,對象在內存中存儲的布局可以分為3塊區域:對象頭(Header)、 實例數據(Instance Data)和對齊填充(Padding)。HotSpot虛擬機的對象頭包括兩部分信息,第一部分用于存儲對象自身的運行時數據, 如哈希碼(HashCode)、GC分代年齡、鎖狀態標志、線程持有的鎖、偏向線程ID、偏向時 間戳等。對象頭的另外一部分是類型指針,即對象指向它的類元數據的指針,虛擬機通過這個指針來確定這個對象是哪個類的實例。

32位對象頭:

圖片圖片

64位對象頭:

圖片圖片

5.執行方法

執行方法,即對象按照程序員的意愿進行初始化。對應到語言層面上講,就是為屬性賦值(注意,這與上面的賦零值不同,這是由程序員賦的值),和執行構造方法。

對象大小與指針壓縮

對象大小可以用jol-core包查看,引入依賴

<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>
import org.openjdk.jol.info.ClassLayout;

/**
 * 計算對象大小
 */
public class JOLSample {

    public static void main(String[] args) {
        ClassLayout layout = ClassLayout.parseInstance(new Object());
        System.out.println(layout.toPrintable());

        System.out.println();
        ClassLayout layout1 = ClassLayout.parseInstance(new int[]{});
        System.out.println(layout1.toPrintable());

        System.out.println();
        ClassLayout layout2 = ClassLayout.parseInstance(new A());
        System.out.println(layout2.toPrintable());
    }

    // -XX:+UseCompressedOops           默認開啟的壓縮所有指針
    // -XX:+UseCompressedClassPointers  默認開啟的壓縮對象頭里的類型指針Klass Pointer
    // Oops : Ordinary Object Pointers
    public static class A {
                       //8B mark word
                       //4B Klass Pointer   如果關閉壓縮-XX:-UseCompressedClassPointers或-XX:-UseCompressedOops,則占用8B
        int id;        //4B
        String name;   //4B  如果關閉壓縮-XX:-UseCompressedOops,則占用8B
        byte b;        //1B 
        Object o;      //4B  如果關閉壓縮-XX:-UseCompressedOops,則占用8B
    }
}


運行結果:
java.lang.Object object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)    //mark word
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)    //mark word     
      8     4        (object header)                           e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)    //Klass Pointer
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total


[I object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           6d 01 00 f8 (01101101 00000001 00000000 11111000) (-134217363)
     12     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
     16     0    int [I.<elements>                             N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total


com.tuling.jvm.JOLSample$A object internals:
 OFFSET  SIZE               TYPE DESCRIPTION                               VALUE
      0     4                    (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4                    (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4                    (object header)                           61 cc 00 f8 (01100001 11001100 00000000 11111000) (-134165407)
     12     4                int A.id                                      0
     16     1               byte A.b                                       0
     17     3                    (alignment/padding gap)                  
     20     4   java.lang.String A.name                                    null
     24     4   java.lang.Object A.o                                       null
     28     4                    (loss due to the next object alignment)
Instance size: 32 bytes
Space losses: 3 bytes internal + 4 bytes external = 7 bytes total

什么是java對象的指針壓縮?

1.jdk1.6 update14開始,在64bit操作系統中,JVM支持指針壓縮

2.jvm配置參數:UseCompressedOops,compressed--壓縮、oop(ordinary object pointer)--對象指針

3.啟用指針壓縮:-XX:+UseCompressedOops(默認開啟),禁止指針壓縮:-XX:-UseCompressedOops

為什么要進行指針壓縮?

1.在64位平臺的HotSpot中使用32位指針(實際存儲用64位),內存使用會多出1.5倍左右,使用較大指針在主內存和緩存之間移動數據,占用較大寬帶,同時GC也會承受較大壓力2.為了減少64位平臺下內存的消耗,啟用指針壓縮功能

3.在jvm中,32位地址最大支持4G內存(2的32次方),可以通過對對象指針的存入堆內存時壓縮編碼、取出到cpu寄存器后解碼方式進行優化(對象指針在堆中是32位,在寄存器中是35位,2的35次方=32G),使得jvm只用32位地址就可以支持更大的內存配置(小于等于32G)

4.堆內存小于4G時,不需要啟用指針壓縮,jvm會直接去除高32位地址,即使用低虛擬地址空間

5.堆內存大于32G時,壓縮指針會失效,會強制使用64位(即8字節)來對java對象尋址,這就會出現1的問題,所以堆內存不要大于32G為好

對象大小計算

1. 在32位系統下,存放Class指針的空間大小是4字節,MarkWord是4字節,對象頭為8字節。

2. 在64位系統下,存放Class指針的空間大小是8字節,MarkWord是8字節,對象頭為16字節。

3. 64位開啟指針壓縮的情況下,存放Class指針的空間大小是4字節,MarkWord是8字節,對象頭為12字節。數組長度4字節+數組對象頭8字節(對象引用4字節(未開啟指針壓縮的64位為8字節)+數組markword為4字節(64位未開啟指針壓縮的為8字節))+對齊4=16字節。

4. 靜態屬性不算在對象大小內。

關于對齊填充:對于大部分處理器,對象以8字節整數倍來對齊填充都是最高效的存取方式。

責任編輯:武曉燕 來源: 碼農本農
相關推薦

2018-01-19 10:43:06

Java面試官volatile關鍵字

2022-06-09 11:20:44

volatile關鍵字

2010-03-08 08:39:54

類加載器newJava

2020-06-08 15:15:26

程序員擺地攤技術

2024-06-27 16:27:04

transientJava序列化

2024-03-13 07:53:57

弱引用線程工具

2022-01-05 09:55:26

asynawait前端

2021-12-25 22:31:10

MarkWord面試synchronize

2021-11-08 09:18:01

CAS面試場景

2023-07-03 08:17:44

JUC工具代碼

2021-12-16 18:38:13

面試Synchronize

2009-08-21 14:16:35

C# New關鍵字

2023-06-05 07:57:53

Kafka消息事務消息

2020-08-10 08:00:13

JavaFinal關鍵字

2012-06-02 00:53:39

Javafinally

2021-09-07 10:44:33

Java 注解開發

2023-03-24 08:01:27

Go語言內存

2020-07-28 00:58:20

IP地址子網TCP

2021-12-02 18:20:25

算法垃圾回收

2025-06-03 07:05:00

Linux操作系統Windows
點贊
收藏

51CTO技術棧公眾號

日本性爱视频在线观看| 黄网站免费在线| 三级成人在线| 中文字幕av一区 二区| 91九色国产在线| 欧美日韩人妻精品一区二区三区 | 成人网页在线免费观看| 欧美精品一区二区蜜桃| 国产成人调教视频在线观看| 91精品国产综合久久小美女| 欧美亚洲日本一区二区三区| 2021av在线| www.色综合.com| 国产精品永久在线| 免费无遮挡无码永久视频| 午夜精品久久久久久久99热影院| 日本高清在线观看| 国产欧美一区视频| 国产日韩久久| 国产精品热久久| 国产精品亚洲产品| 欧美精品午夜视频| 舐め犯し波多野结衣在线观看| 国产麻豆精品| 欧美午夜精品一区| 久久久久久久久久网| 求av网址在线观看| 久久久精品日韩欧美| av电影成人| 国产乱叫456在线| 日韩精品电影在线| 2025国产精品视频| 国产极品在线播放| 欧美一区二区三区久久精品| 中文字幕一区二区精品| 久久无码人妻精品一区二区三区| 国产精品视频一区视频二区| 欧美三级日韩三级| 欧美一级黄色影院| 伊人成综合网站| 亚洲福利视频导航| 欧美在线观看黄| av中文在线| 国产日产欧美一区二区三区| 蜜桃网站成人| 青青青手机在线视频观看| 成人激情午夜影院| 国产精品免费一区二区三区| 一区二区三区黄| 麻豆传媒一区二区三区| 国产精品狠色婷| 无码人妻精品一区二区50| 亚洲欧美清纯在线制服| 2018日韩中文字幕| 久草视频在线观| 亚洲欧美久久久| 日本中文字幕不卡免费| 日本a级c片免费看三区| 性网爆门事件集合av| 精品国产aⅴ| 日韩精品视频在线播放| 欧美性xxxx图片| 综合综合综合综合综合网| 日韩av最新在线观看| 欧美做受喷浆在线观看| 欧美极品在线观看| 永久免费看mv网站入口亚洲| 亚洲午夜精品久久久久久高潮| 精品视频99| 中文字幕无线精品亚洲乱码一区 | 国产三级三级看三级| 岛国一区二区| 91精品久久久久久久99蜜桃| 中国男女全黄大片| 久久中文资源| 一本大道亚洲视频| 国产午夜精品理论片| 欧美淫片网站| 98视频在线噜噜噜国产| 你懂的国产在线| 蜜臀av一区二区在线免费观看| 成人观看高清在线观看免费| www.国产精品视频| 91免费观看在线| 亚洲日本一区二区三区在线不卡 | 亚洲精品视频免费看| 国产一二三区在线播放| 国产精品专区免费| 在线成人免费观看| 精品1卡二卡三卡四卡老狼| 亚洲精品播放| 美女啪啪无遮挡免费久久网站| 日本精品一区二区三区在线播放视频| 扒开jk护士狂揉免费| 久久精品国产99久久| 欧美激情免费看| 色老头一区二区| 粉嫩一区二区三区性色av| 久久66热这里只有精品| 日本激情视频在线观看| 五月激情六月综合| 在线观看免费污视频| 51精品国产| 在线看福利67194| 国产福利久久久| 美女脱光内衣内裤视频久久网站| 国产精品免费观看高清| 一级毛片视频在线观看| 精品美女永久免费视频| www.com污| 蜜桃一区二区三区| 久久久久久欧美| 91禁在线观看| 久久久久久免费| 久久久久久免费看| 四虎国产精品免费久久| 亚洲欧美成人网| www.xxxx精品| 伊人影院综合网| 亚洲精品偷拍| 444亚洲人体| 久久久久久久久免费视频| 欧美日韩中文在线观看| 国产免费无码一区二区| 久久在线播放| 国产精品1234| 少妇又色又爽又黄的视频| 亚洲欧洲性图库| 黑森林精品导航| 综合综合综合综合综合网| 午夜精品福利视频| 国产又黄又猛又爽| 中文字幕av免费专区久久| 男人靠女人免费视频网站| www.国产精品一区| 久99久在线视频| 99久久精品国产一区色| 国产精品免费免费| 无需播放器的av| 精品国产99| 国产精品久久久久99| 青青久草在线| 一区二区电影| 欧美私人免费视频| 亚洲一区二区观看| 国产欧美午夜| 久久婷婷国产综合尤物精品| а√在线天堂官网| 精品粉嫩超白一线天av| 精品一区在线视频| 成人性视频免费网站| 9色porny| 欧美人妖视频| 日韩av成人在线| 二区在线观看| 欧美日韩五月天| 国产主播av在线| 久久99精品一区二区三区| 中文字幕av导航| 国产精品毛片无码| 久久久久久成人精品| 亚洲精品97久久中文字幕无码| 亚洲一区二区三区自拍| 亚洲精品第二页| 国产精品视频| 视频一区亚洲| 国产高清亚洲| 久久久亚洲福利精品午夜| 手机看片一区二区| 一本色道久久加勒比精品 | 91黄色小网站| 欧美亚洲国产激情| 成人在线观看视频网站| 在线看一级片| 日韩精品欧美激情| 亚洲性猛交富婆| 亚洲精品一二三| 女同性恋一区二区三区| 久久激情一区| 亚洲 欧洲 日韩| 哺乳挤奶一区二区三区免费看| 欧美在线不卡区| 色综合久久影院| 精品国产露脸精彩对白| 久久久久99精品成人片我成大片| 国产亚洲精品aa| 欧美精品色视频| 国产情侣一区| 一区二区三区的久久的视频| 一区二区精彩视频| 51色欧美片视频在线观看| 91啦中文在线| 欧美成人性战久久| 亚洲精品成人在线视频| 中文字幕中文字幕一区二区| 国产伦精品一区二区三区88av| 日本怡春院一区二区| 嫩草影院中文字幕| 欧美日韩一二| 国产伦精品一区二区三区视频孕妇 | 久久久久国产精品人| 永久免费的av网站| 中文久久精品| 国产又粗又大又爽的视频| 亚洲精品一级二级三级| 91欧美精品成人综合在线观看| 欧美a级在线观看| 日韩视频在线免费| 天堂中文在线资| 欧美一三区三区四区免费在线看| 亚洲永久精品在线观看| 一区二区三区在线免费| 欧洲美熟女乱又伦| 99久久99久久精品免费看蜜桃| 在线观看免费不卡av| 国产精品一二| 国产www免费| 99免费精品| 午夜精品一区二区在线观看的| 99久久人爽人人添人人澡| 国产日韩亚洲欧美| 在线免费三级电影网站| 色综合天天综合网国产成人网| 日本在线观看www| 一区二区av在线| 亚州av在线播放| 日韩精品一区二区三区视频播放| 亚洲综合网av| 91国偷自产一区二区使用方法| 成人午夜视频精品一区| 亚洲自拍欧美精品| 日本青青草视频| 亚洲另类中文字| 美国一级片在线观看| 日本一二三不卡| 欧美多人猛交狂配| 久久新电视剧免费观看| 国产xxxxxxxxx| www.亚洲在线| 国内精品免费视频| 大胆亚洲人体视频| 午夜性福利视频| 国产高清久久久| 日本女人性视频| 国产毛片精品视频| 欧美又黄又嫩大片a级| 精品在线免费视频| 想看黄色一级片| 麻豆一区二区99久久久久| www.这里只有精品| 免费在线视频一区| 中文字幕免费高清在线| 乱一区二区av| 久久精品国产99久久99久久久| 精品一区二区免费| 特级黄色片视频| 国产电影一区在线| www.17c.com喷水少妇| 成人av电影在线网| 黄色a一级视频| 久久九九久精品国产免费直播| 日本少妇高潮喷水xxxxxxx| 国产欧美精品日韩区二区麻豆天美| 最新中文字幕av| 国产精品剧情在线亚洲| 2025国产精品自拍| 亚洲永久精品国产| 国产超碰人人爽人人做人人爱| 欧美性猛交xxxx乱大交蜜桃 | 7878成人国产在线观看| 国产伦精品一区二区三区免.费 | 91精品电影| 一卡二卡三卡视频| 久久国产99| 日本中文字幕观看| 国产白丝网站精品污在线入口| 少妇精品无码一区二区三区| 欧美—级在线免费片| 久久国产高清视频| 亚洲成av人综合在线观看| 日批视频免费在线观看| 欧美电影在线免费观看| 神马午夜在线观看| 色吧影院999| 1区2区在线| 国产精品流白浆视频| 日本精品视频| 欧美久久久久久一卡四| 久久久久久久久丰满| 国产男女免费视频| 美女视频黄 久久| 亚洲av人人澡人人爽人人夜夜| 久久久777精品电影网影网| 欧美被狂躁喷白浆精品| 日韩欧美在线视频免费观看| 国产又粗又猛又爽又黄91| 亚洲国产精久久久久久久| wwwww在线观看免费视频| 欧美高清电影在线看| 欧美性理论片在线观看片免费| 91久久精品www人人做人人爽| 日韩精品丝袜美腿| 影音先锋男人的网站| 免费一区视频| 少妇欧美激情一区二区三区| 国产三级一区二区| 久久免费视频6| 欧美高清精品3d| 日韩a在线观看| 久久久女女女女999久久| 日本黄色成人| 欧美中日韩免费视频| 欧美日本一区| 国产精品v日韩精品v在线观看| 91在线视频播放| 欧美丰满艳妇bbwbbw| 欧美日本免费一区二区三区| 欧美美乳在线| 97精品伊人久久久大香线蕉| 欧美精品三级在线| 亚洲欧洲一区二区福利| 麻豆精品91| 视频免费在线观看| 亚洲午夜三级在线| 99国产精品久久久久久久成人| 中文字幕日韩视频| 欧美黑人疯狂性受xxxxx野外| 国产日韩欧美一区二区| 欧美+亚洲+精品+三区| 成年网站免费在线观看| 国产三级一区二区三区| 无码人妻精品一区二区三区9厂| 日韩成人av在线| 麻豆mv在线看| 韩国成人一区| 亚洲激情午夜| 无码人妻一区二区三区精品视频| 亚洲乱码国产乱码精品精可以看 | 日韩精品在线影院| 国模雨婷捆绑高清在线| 91成人理论电影| 91精品国产91久久久久久黑人| 亚洲欧美日韩综合网| 国产精品久久久久久福利一牛影视| 国产午夜无码视频在线观看| 亚洲欧美在线一区二区| 日韩不卡免费高清视频| 日韩av电影免费在线| 视频在线在亚洲| 亚洲午夜精品久久久久久高潮| 欧美影院精品一区| 亚洲成a人v欧美综合天堂麻豆| 国产欧美一区二区| 午夜精品毛片| 男人女人拔萝卜视频| 亚洲国产精品久久久久婷婷884 | 中文国产成人精品久久一| 国产一区二区主播在线| 视频一区亚洲| 九色综合狠狠综合久久| 成人在线观看高清| 日韩精品影音先锋| 国产夫妻在线播放| 欧美一区二区在线视频观看| 免费高清在线一区| 日韩福利小视频| 精品免费国产二区三区| av剧情在线观看| 免费久久久一本精品久久区| 日韩专区中文字幕一区二区| 少妇视频在线播放| 在线播放中文字幕一区| 蜜桃传媒在线观看免费进入| 久久av二区| 老司机免费视频一区二区三区| 九九热视频在线免费观看| 欧美一级一级性生活免费录像| 波多野结衣精品| 日韩高清av| 国产精品 欧美精品| 国产成人在线观看网站| 一区二区成人av| 综合成人在线| 91看片就是不一样| 亚洲女同女同女同女同女同69| 欧美熟女一区二区| 国产成人综合精品| 亚洲第一偷拍| www.自拍偷拍| 91精品在线观看入口| av资源一区| 亚洲天堂av免费在线观看| 99麻豆久久久国产精品免费优播| 性高潮视频在线观看| 久久97久久97精品免视看| 亚洲黄页在线观看| 性xxxxxxxxx| 欧美色爱综合网| 国产传媒在线| 妞干网这里只有精品|