HotSpot 虚拟机对象的实例数据部分是否存的是地址值? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yangyuhan12138
V2EX    Java

HotSpot 虚拟机对象的实例数据部分是否存的是地址值?

  •  
  •   yangyuhan12138 2020-04-18 16:13:08 +08:00 1901 次点击
    这是一个创建于 2032 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域:

    对象头( Header ) 实例数据( Instance Data ) 对齐填充( Padding )

    ###实例数据 实例数据部分就是成员变量的值,其中包括父类成员变量和本类成员变量。

    我的疑问是,实例数据这部分(成员变量)是否存的是地址值指向堆中的另一个对象? 由于对象创建应该是申请内存(对象所需内存的大小在类加载完成后便可完全确定)所以在堆内存中相同类所创建地对象应该是一样大的呀,就拿 hashmap 来说,hashmap 内部维护的 node 数组,在扩容的时候会新建一个数组,并将指针指向他,如果实例数据这部分是存的数组本身的话,根本就没办法扩容了

    3 条回复    2020-04-18 16:57:08 +08:00
    guyeu
        1
    guyeu  
       2020-04-18 16:38:24 +08:00
    成员变量的值显然保存的是引用而不是数据本身。
    secondwtq
        2
    secondwtq  
       2020-04-18 16:42:55 +08:00
    你这个问题跟 https://v2ex.com/t/663545 这里的楼主是类似的:混淆了 Primitive 值和 Reference 值
    学习 C++ 也可以解决这个问题(其实学 C 就可以,不过 C 太乱了)

    Primitive 值是可以直接存的,Reference 值始终存的是指向另一个对象的指针。而从底层的角度,把 Reference 当成指针 Primitive 看待,这问题就解决了。

    楼主想想就知道如果“A 对象的实例数据部分存的是指向 B 对象的地址”,那么 B 对象的实例数据存在哪里?存一个指向 C 对象的指针?这就一直套娃了
    而且楼主明显是知道“新建一个数组,并将指针指向他”的 ...
    yangyuhan12138
        3
    yangyuhan12138  
    OP
       2020-04-18 16:57:08 +08:00
    @guyeu 我刚 Google 了一下发现确实是我像这样 是存的 oops ( Ordinary Object Pointers )
    @secondwtq 我懂了 基本类型直接存,引用类型存指针
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3397 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:42 PVG 12:42 LAX 20:42 JFK 23:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86