跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • HotSpot 虚拟机对象的实例数据部分是否存的是地址值?
未分類
3 5 月 2020

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

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

資深大佬 : yangyuhan12138 19

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

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

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

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

大佬有話說 (3)

  • 資深大佬 : guyeu

    成员变量的值显然保存的是引用而不是数据本身。

  • 資深大佬 : secondwtq

    你这个问题跟 https://v2ex.com/t/663545 这里的主是类似的:混淆了 Primitive 值和 Reference 值
    学习 C++ 也可以解决这个问题(其实学 C 就可以,不过 C 太乱了)

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

    主想想就知道如果“A 对象的实例数据部分存的是指向 B 对象的地址”,那么 B 对象的实例数据存在哪里?存一个指向 C 对象的指针?这就一直套娃了
    而且主明显是知道“新建一个数组,并将指针指向他”的 …

  • 主 資深大佬 : yangyuhan12138

    @guyeu 我刚 Google 了一下发现确实是我像这样 是存的 oops ( Ordinary Object Pointers )
    @secondwtq 我懂了 基本类型直接存,引用类型存指针

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具