zoukankan      html  css  js  c++  java
  • 【五】对象的创建

    二、Java  对象的结构

    1.Header(对象头)

    • 自身运行时数据 (Mark Word)
      •   哈希值 Object 的hashCode() 是native修饰的   |   GC分代年龄  | 锁状态标志  |  线程持有的锁  |  偏向线程ID  |  偏向时间戳
    • 类型指针

    2、InstanceData

     无论是从父类继承来的还是子类定义的,都在这里。这部分的存储顺序会受到存储策略,和字段在Java源码中定义的顺序的影响。HotSpot虚拟机默认的分配策略,是相同的宽度的字段被分配到一起。

      eg: long  double 可能被分配到一块,short 和char 被分配到一块儿。

    在满足这个前提之下,父类中定义的变量可能会出现在子类变量之前。

    3、Padding(填充,无实际意义)

    HotSpot要求对象的大小必须是8个字节的整数倍,而对象头部分正好是8个字节的整数倍,因此对象实例数据部分如果没有对齐时就需要通过padding补位

    三、对象的访问定位

    使用句柄

    使用指针

    栈内存中的引用指向对内存的区域,这么说不够严谨。

    在Java虚拟机的规范中,这个栈中的引用类型,仅仅是规定了一个指向对象的引用。并没有定义这个引用对象应该通过何种方式去定位访问堆中的具体位置。

    确实是引用了一块堆内存中的区域,但是这个区域是否就一定是这个对象呢?不一定!既可以是对象本身,也可以是其它的一块儿内存区域

  • 相关阅读:
    MyBatis 数据库字段排序问题(一)
    MySQL 函数
    Google 浏览器设置打开超链接到新窗口标签页
    Linux 命令整理 vim
    IDEA比较实用的插件之翻译插件(Translation)
    Dubbo-本地Bean测试
    Spring+dubbo错误(二)
    Spring+dubbo错误(一)
    Dubbo-本地测试直连
    上架app被拒原因总结
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10500219.html
Copyright © 2011-2022 走看看