zoukankan      html  css  js  c++  java
  • java对象在内存中的结构

    在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍?

    我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大小,那么必须需要知道对象在虚拟机中的结构是怎样的,来看看Hotsopt中对象在内存中的结构:

    在上面这张图里面可以看出,对象在内存中的机构主要包含以下几个部分:

    • Mark Word:对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级的标记位,偏向锁标记位等等。
    • Class对象指针:Class对象指针的大小也是4个字节,其指向的位置是对象对应的Class对象(其对应的元数据对象)的内存地址
    • 对象实际数据:这里面包括了对象的所有成员变量,其大小由各个成员变量的大小决定,比如:byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节,refrence是4个字节。
    • 对齐:最后一部分是对齐填充的字节,按8个字节填充

    根据上面的图,那么我们可以得出Integer的对象的结构如下:

    Integer只有一个int类型的成员变量value,所以其对象实际数据部分的大小是4个字节,然后再在后面填充4个字节达到8字节的对齐,所以可以得出Integer对象的大小是16个字节。

    因此,我们可以得出Integer对象的大小是原生的int类型的4倍。

    关于对象的内存结构,需要注意数组的内存结构和普通对象的内存结构稍微不同,因为数据有一个长度length字段。所以在对象头后面还多了一个int类型的length字段,占4个字节,接下来才是数组中的数据。如下图:

  • 相关阅读:
    c#读取文件内容存放到int数组 array.txt
    YxShop_V4.2.0开源免费商城2009新春版发布,整合dz最新版,开源!
    c# 读取xml文件 "分析 EntityName 时出错"的解决方案
    正则表达式口诀
    c#操作xml文件
    在WebClient类中保持Session
    实测SCSI RAID速度
    朋友送我的一套书
    给LFF占了个板凳
    ECC内存也能坏
  • 原文地址:https://www.cnblogs.com/cherish010/p/10407399.html
Copyright © 2011-2022 走看看