精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆精品视频在线观看免费 | 亚洲一区亚洲二区| 天天色天天综合| 亚洲高清影院| 五月天欧美精品| 亚洲精品日韩成人| 精品欧美在线观看| 麻豆成人精品| 久久国产精品久久久久久久久久| 超碰caoprom| 日本肉肉一区| 亚洲午夜国产一区99re久久| 欧美日韩成人一区二区三区| 国产女同91疯狂高潮互磨| 欧美日一区二区在线观看 | 91成人国产| 日韩成人小视频| 中文字幕线观看| 韩国成人二区| 中文字幕精品在线不卡| 国产亚洲一区二区三区在线播放| 伊人精品在线视频| 亚洲综合国产| 欧美激情一区二区三区成人| 国精产品一区一区| 国产成人av| 欧美r级电影在线观看| 麻豆一区二区三区视频| a天堂资源在线| 亚洲麻豆国产自偷在线| 亚洲ai欧洲av| 蜜桃视频在线入口www| 国产一区二区伦理片| 国产精品久久久久久久久久尿| 精品无码一区二区三区电影桃花 | 久久久国产一区| 好吊视频在线观看| 精品淫伦v久久水蜜桃| 欧美一区二区播放| 亚洲一区二区福利视频| 久久天堂影院| 欧美三级在线播放| 蜜臀久久99精品久久久酒店新书 | 欧美大喷水吹潮合集在线观看| 亚洲日本免费电影| 欧美撒尿777hd撒尿| 少妇人妻互换不带套| 日韩脚交footjobhd| 亚洲图片欧美色图| 国产女主播自拍| 色呦呦网站在线观看| 综合久久久久久| 一区二区三区四区不卡| 亚洲欧美视频一区二区| 亚洲国产精品成人综合| 午夜精品亚洲一区二区三区嫩草| 黄色毛片在线看| 欧美激情在线一区二区三区| 欧美成人第一区| 欧美18xxxxx| 久久久亚洲国产美女国产盗摄| 欧美二区三区| jizzjizz在线观看| 成人免费一区二区三区在线观看| 大桥未久一区二区| 怡红院在线观看| 亚洲一区欧美一区| 成人在线观看你懂的| 91美女精品| 日韩人体视频一二区| 国产日韩成人内射视频| 欧洲精品一区二区三区| 欧美日本精品一区二区三区| 色偷偷中文字幕| 成功精品影院| 亚洲欧美视频在线| 蜜桃av免费在线观看| 中文字幕一区二区三区欧美日韩| 欧美裸体男粗大视频在线观看| xxxx 国产| 久久深夜福利| 成人字幕网zmw| 理论片中文字幕| 国产亚洲va综合人人澡精品| 亚洲一二区在线| 婷婷丁香在线| 欧美午夜片在线免费观看| 91淫黄看大片| 日韩成人视屏| 亚洲欧美日韩精品久久| 亚洲欧洲综合网| 亚洲高清毛片| 国产精品国产亚洲伊人久久| av中文字幕播放| 久久久久久综合| 最近免费观看高清韩国日本大全| 丁香影院在线| 欧美三级乱人伦电影| 香蕉视频免费网站| 成人网18免费网站| 国内偷自视频区视频综合| 久久久久久少妇| 国产一区二区在线影院| 久久亚洲午夜电影| 麻豆视频免费在线观看| 欧美性极品xxxx做受| 一级黄色片国产| 先锋影音国产精品| 欧美国产视频一区二区| 中文字幕xxxx| 不卡高清视频专区| 一区二区三区av在线| 91av亚洲| 亚洲成人黄色在线观看| 黄色精品视频在线观看| 亚洲一区国产一区| 91深夜福利视频| 国产女主播在线直播| 亚洲h在线观看| 三级av免费看| 精品视频亚洲| 国产91精品高潮白浆喷水| 国产欧美日韩综合精品一区二区三区| 久久老女人爱爱| 777av视频| 视频一区日韩| 久久久999国产| 免费看av在线| 久久人人爽人人爽| 精品一二三四五区| 国产免费av国片精品草莓男男| 亚洲欧美中文字幕| 日韩福利片在线观看| 国产精品自拍网站| 尤物一区二区三区| 国产精品亚洲d| 亚洲精品一区中文| 久久久久久久久影院| 成人激情av网| 日韩精品综合在线| 亚洲精品一区在线| 欧美巨大黑人极品精男| 99久久精品国产一区色| 中文字幕一区二区三区视频 | 欧美一区国产| 亚洲免费伊人电影在线观看av| 国产一级一片免费播放放a| 韩日av一区二区| 曰韩不卡视频| 9999精品视频| 欧美成人免费观看| 国产福利免费视频| 一区二区三区在线看| 韩国三级丰满少妇高潮| 91成人精品视频| 不卡视频一区二区三区| 免费毛片在线看片免费丝瓜视频 | 96pao国产成视频永久免费| 永久免费在线观看视频| 欧美日韩一区二区三区高清| 天堂网av2018| 国产一区二区不卡老阿姨| 天天在线免费视频| 成功精品影院| 日本在线观看天堂男亚洲| 福利小视频在线观看| 欧美日韩久久久久久| 三级黄色录像视频| 懂色av中文字幕一区二区三区| 草草草视频在线观看| 免费看成人人体视频| 日本道色综合久久影院| 国产成人天天5g影院在线观看| 欧美精品免费视频| 久久久久久国产精品免费播放| www.激情成人| 日本久久久久久久久久久久| 亚洲色图网站| 国产一区二区精品免费| 欧美freesex| 久久精品影视伊人网| 午夜精品久久久久久久99| 天天影视色香欲综合网老头| 一级黄色片大全| 久久99国产精品尤物| 97免费视频观看| 国内成人精品| 2022国产精品| 日韩精品影院| 欧美人成在线视频| 国际av在线| 日韩欧美国产一区二区三区| 国产www在线| 亚洲黄网站在线观看| 国产精品无码一区二区三区免费 | 国产鲁鲁视频在线观看免费| 欧美一区二区啪啪| 日本熟女毛茸茸| 怡红院av一区二区三区| 国产精品高清无码在线观看| 国产伦精一区二区三区| 亚洲中文字幕久久精品无码喷水| 欧美精品自拍| 婷婷精品国产一区二区三区日韩 | 欧美日韩成人一区二区三区| 精品久久亚洲| 国产精品大陆在线观看| 激情图片在线观看高清国产| 中文字幕av日韩| 日韩porn| 亚洲国产成人在线播放| 91麻豆一区二区| 一本一道综合狠狠老| 国产乡下妇女做爰视频| 国产精品国产三级国产aⅴ原创| 亚洲国产精品无码久久久久高潮 | 91麻豆一二三四在线| 国产亚洲精品美女久久久| 五月婷婷丁香花| 日韩欧美国产电影| 精品久久久久久久久久岛国gif| 国产一区二区电影| 日本亚洲欧洲精品| 99国产精品久久一区二区三区| 国产精品r级在线| 国产第一页在线| 欧美精品在线视频观看| 在线观看av黄网站永久| 亚洲精品少妇网址| 丰满人妻av一区二区三区| 欧美挠脚心视频网站| 久久久久久不卡| 欧美日韩国产一区在线| 久久久久无码国产精品| 亚洲精品乱码久久久久久| 国产一区第一页| 国产精品全国免费观看高清| 真实乱视频国产免费观看| 91在线观看视频| 日本一区二区在线免费观看| 成人精品视频一区二区三区尤物| 亚洲天堂小视频| 国产乱国产乱300精品| 国产精欧美一区二区三区白种人| 久久99精品久久久久久国产越南| 欧美三级理论片| 蜜桃视频在线一区| 天天干天天干天天干天天干天天干| 乱码第一页成人| 久久久久免费精品| 奇米在线7777在线精品 | 美女久久一区| 亚洲自偷自拍熟女另类| 性一交一乱一区二区洋洋av| 欧美牲交a欧美牲交aⅴ免费真| 亚洲欧美日韩国产| 国内外免费激情视频| 全国精品久久少妇| 日本xxxx黄色| 激情六月婷婷综合| 亚洲丝袜在线观看| 成人免费va视频| 国产日韩视频一区| 97久久超碰国产精品| 亚洲一级中文字幕| 国产精品美女一区二区三区 | 四虎在线免费观看| 亚洲开心激情网| av大全在线免费看| 久久影视电视剧免费网站| 亚洲制服国产| 91精品国产高清久久久久久| 成人激情综合| 亚洲a一级视频| 好吊妞国产欧美日韩免费观看网站| 精品无码久久久久久久动漫| 国产欧美一区二区精品久久久| 亚洲欧美成人一区| 欧美激情综合色综合啪啪| 久久久久免费看黄a片app| 可以免费看不卡的av网站| 日本高清久久久| 国产99久久久国产精品潘金| 麻豆国产精品一区| 国产精品嫩草影院av蜜臀| 九九视频免费看| 欧美性猛交xxxx黑人| 91午夜交换视频| 亚洲精品xxx| 欧美精品电影| 91精品国产高清久久久久久91 | 亚洲高清自拍| 日韩精品视频一区二区在线观看| 久久99热狠狠色一区二区| 日韩综合第一页| 国产精品色在线| 久草国产精品视频| 欧美日韩一区高清| 无码精品黑人一区二区三区 | 看欧美日韩国产| 天天色综合色| 国产91在线视频观看| 国产精品77777| 一级片久久久久| 亚洲成人黄色影院| 夜夜躁很很躁日日躁麻豆| 亚洲精品91美女久久久久久久| 免费av在线网址| 国产91九色视频| 国产主播性色av福利精品一区| 中文字幕欧美人与畜| 噜噜噜91成人网| 超碰caoprom| 亚洲精品ww久久久久久p站| 成人一级免费视频| 亚洲精品在线电影| 中文在线手机av| 国产精品一区二区三区免费视频| 欧美日韩一区二区三区四区不卡 | 激情小说网站亚洲综合网| 99久久综合狠狠综合久久aⅴ| 国产成人a亚洲精v品无码| 粉嫩嫩av羞羞动漫久久久| 国产又粗又长又黄的视频| 91黄色激情网站| 日本一区高清| 午夜精品久久久久久久99热| 欧美大片91| 亚洲 欧洲 日韩| 蜜桃av噜噜一区二区三区小说| aaaaa级少妇高潮大片免费看| 亚洲一区二区视频在线观看| 99在线精品视频免费观看软件| 中文字幕av一区二区| 日韩欧美精品电影| 免费日韩av电影| 国产视频久久| 欧美精品欧美极品欧美激情| 亚洲一级不卡视频| 性中国xxx极品hd| 欧美情侣性视频| 91久久偷偷做嫩草影院电| 一二三在线视频| 国产精品888| 国产一级做a爱免费视频| 日韩欧美国产午夜精品| 日本在线观看高清完整版| 91久久偷偷做嫩草影院| 欧美久久综合| 娇妻高潮浓精白浆xxⅹ| 亚洲成av人片| 婷婷婷国产在线视频| 人人爽久久涩噜噜噜网站| 精品影片在线观看的网站| 99视频免费播放| 国产精品午夜在线| 在线观看日批视频| 日韩中文在线中文网三级| 一区二区三区无毛| 欧美日韩午夜爽爽| 成人在线综合网| 国产精品久久久久久99| 亚洲另类激情图| 亚洲电影有码| 国产精品久久成人免费观看| 国产成人8x视频一区二区| 日本一级淫片免费放| 亚洲欧美国产日韩天堂区| 成人在线免费av| 亚洲中文字幕无码一区二区三区| 成人免费毛片aaaaa**| 亚洲第一在线播放| 伊人伊成久久人综合网小说| 2019中文亚洲字幕| 青青青在线视频播放| 久久亚洲春色中文字幕久久久| 国产成人无码专区| 久久中国妇女中文字幕| 国产精品一区二区三区美女| 日本在线视频www| 最新久久zyz资源站| 成人久久精品人妻一区二区三区| 欧美又大又粗又长| 久久综合成人| 日本国产在线视频| 在线亚洲一区观看| 欧美草逼视频| 神马影院我不卡午夜| 国产精品一区不卡| 狠狠人妻久久久久久| 久久精品中文字幕电影| 美女扒开腿让男人桶爽久久动漫| 超碰超碰在线观看| 亚洲成a人片在线观看中文| 91在线不卡| 国产一区二区久久久| 久久99精品视频| 精品不卡一区二区| 久久精品视频99| 蜜桃一区二区|