首页 > 系统相关 >对象的内存分布

对象的内存分布

时间:2023-03-05 22:24:30浏览次数:34  
标签:字节 填充 对象 分布 内存 对齐 数据

对象的内存分布,以HotSpot为例。对象在内存中存储的布局可以分为3个部分:
1、对象头
2、实例数据
3、对齐填充
具体每个部分的描述:
一、
对象头,主要包含MarkWord(标记字段)和ClassPointer类型指针。

Class Pointer是对象指向它的类元数据的指针,JVM需要通过这个指针,来判断这个对象是哪个类的实例。

MarkWord用来存储对象自身运行时的数据。它是实现轻量级和偏向锁的关键。

那么对象自身有哪些数据呢?
如HashCode、GC的分代年龄、锁状态、线程持有的锁、偏向线程ID等等。

二、
实例数据,就是对象的有效信息,比如属性字段等等。

三、
对齐填充,填充的是长度。因为虚拟机要求对象起始地址必须是8字节的整数倍。所以当对象的大小不是8字节的倍数时,就会进行对齐填充,让它变成8字节的倍数,所以该数据不是必须存在的。
举例说明,假如某个对象的大小只有15KB,因为8字节的整数倍,所以在创建内存大小时,实际占用的就是16KB。

标签:字节,填充,对象,分布,内存,对齐,数据
From: https://www.cnblogs.com/anboy/p/17181917.html

相关文章

  • python 的 getattr 返回对象属性值
    getattr作用:可以获取对象属性值 举例:正常情况下获取字符下标#获取字符下标a='中国心'print(a.find('心'))>>>执行结果2 如果使用getattr函数#使用get......
  • 分配内存
    前面提到的存储类型,在确定了存储类别之后,会根据已制定好的内存管理规则,将自动选择其作用域和存储期,然而,还有更灵活的选择,即用库函数分配和管理内存。所有程序都必须预留足够......
  • 版本号及面向对象设计原则
    1.版本号软件版本号就是商品的型号。常见的版本号命名规则和几种类型[name].x.y.z-[state]name 为可选段,一般为v,表示Version;x.y.z 为各版本的序号,一般都会遵循语义......
  • Java 面向对象
    1、构造方法每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的......
  • java内存分配
    1.栈方法运行时使用的内存。比如main方法运行,进入方法栈中执行2.堆存储对象或者数组。new来创建的都存储在堆内存3.方法区存储可以运行的class文件4.本地方法栈JVM......
  • 面向对象设计原则
    1.单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。2.开放封闭原则(OCP,OpenCl......
  • UML类图和对象图
    ClassDiagram类图格式------------------------------类名+Attribute属性+Operation操作(){约束}-------------------------------可见性+Public公有-Pri......
  • 浅析概率、期望、方差、分布
    浅析概率、期望、方差、分布目录浅析概率、期望、方差、分布更好的阅读体验戳此进入概率定义基本公式全概率公式贝叶斯公式独立事件两事件间的独立多个事件之间的独立零阶......
  • 电信天翼云容器通过内网访问对象存储服务
    电信天翼云容器通过内网访问对象存储服务部署在云服务器的Web软件,访问对象存储服务获取对象文件,首选采用内网方式,因为内网速度快,不消耗公网带宽。阿里云OSS有内网和公网2......
  • 面向对象中@perproty的作用
    @property是Python中的一个装饰器(decorator),用于创建getter和setter方法。其作用是将类的方法转换为相应的属性,从而使得代码更加简洁明了。在Python中,我们可以通......