zoukankan      html  css  js  c++  java
  • JAVA对象头

    #为了防止自己忘记,先记着,之前我一直以为《深入理解JAVA虚拟机》写错了来着。

    一. JAVA对象

    在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。

    也就是说  JAVA对象 = 对象头 + 实例数据 + 对象填充

     二. 对象头

    对象头由两部分组成,一部分用于存储自身的运行时数据,称之为 Mark Word,另外一部分是类型指针,及对象指向它的类元数据的指针。

    对象头 = Mark Word + 类型指针

    (未开启指针压缩的情况下)

    在32位系统中,Mark Word = 4 bytes = 32 bits,对象头 = 8 bytes = 64 bits;

    在64位系统中,Mark Word = 8 bytes = 64 bits ,对象头 = 16 bytes = 128bits;

    三. 实例数据

    http://www.cnblogs.com/magialmoon/p/3757767.html  引用这位大手子的文章

    原生类型(primitive type)的内存占用如下:

    Primitive Type Memory Required(bytes)
    boolean                       1
    byte                             1
    short                            2
    char                             2
    int                                4
    float                             4
    long                             8
    double     8

    reference类型在32位系统上每个占用4bytes, 在64位系统上每个占用8bytes。

    四. 对齐填充

    对齐填充并不是必然存在的,也没有什么特别的意义,他仅仅起着占位符的作用,由于HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说,就是对象的大小必须是8字节的整数倍。而对象头正好是8字节的倍数,因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/mezhouyang/p/7475939.html
Copyright © 2011-2022 走看看