二十六、对象的实例化内存布局与访问定位
创始人
2025-06-01 19:31:09

一、对象的实例化

在这里插入图片描述
1.判断对象对用的类是否加载、链接、初始化。
2.为对象分配内存。
3.处理并发安全问题。
4.初始化分配到的空间。
5.设置对象的对象头。
6.执行init方法进行初始化。

1.虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为key进行查找对应的class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果没有找到,则进行类加载,并生成对应的Class类对象。
2.首先计算对象占用空间大小,接着在堆中划分一块内存给新对象。如果实例成员变量是引用变量,仅分配引用变量空间即可,即4个字节大小。
3.如果内存是规整的,那么虚拟机将采用的是指针碰撞法来为对象分配内存。意思是所有用过的内存在一边,空闲的内存在另一边,中间放着一个指针作为分界点的指示器,分配内存就仅仅是把指针向空闲那边挪动一段与对象大小相等的距离罢了。如果垃圾收集器选择的是Serial、ParNew这种基于压缩算法的,虚拟机采用这种分配方式。一般使用带有compact(整理)过程的收集器时,使用指针碰撞。
4.如果内存不规整,已使用的内存和未使用的内存相互交错,那么虚拟机将采用的时空闲列表法来为对象分配内存。意思是虚拟机维护了一个列表,记录上哪些内存块是可用的,再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。这种分配方式成为"空闲列表(Free list)"
5.再Java程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。因此一般来说(由字节码中是否跟随有invokespecial指令决定),new指令之后会接着就是执行方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完全创建出来。
6.将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储再对象的对象头中。这个过程的具体设置方式取决于JVM实现。

/*** 对象实例化的过程*  ① 加载类元信息 - ② 为对象分配内存 - ③ 处理并发问题  - ④ 属性的默认初始化(零值初始化)*  - ⑤ 设置对象头的信息 - ⑥ 属性的显式初始化、代码块中初始化、构造器中初始化***  给对象的属性赋值的操作:*  ① 属性的默认初始化 - ② 显式初始化 / ③ 代码块中初始化 - ④ 构造器中初始化* @author * @create */public class Customer{int id = 1001;String name;Account acct;{name = "匿名客户";}public Customer(){acct = new Account();}}
class Account{}

二、对象的内存布局

在这里插入图片描述1.对象头(Header)
1)包含两部分
1))运行时元数据(Mark Word)
1)))哈希值(HashCode)
2)))GC分代年龄
3)))锁状态标志
4)))线程持有锁
5)))偏向线程id
6)))偏向时间戳
2))类型指针------指向类元数据InstanceKlass,确定该对象所属的类型
2) 说明:如果是数组,还需记录数组的长度。

2.实例数据(Instance Data)
1)它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)
2)规则
1))相同宽度的字段总是被分配再一起。
2))父类中定义的变量会出现在子类之前
3))如果CompactFields参数为true(默认为true):子类的窄变量可能插入到父类变量的空隙
3.对齐填充
1)不是必须的,也没有特别含义,仅仅起到占位符的作用。
在这里插入图片描述

三、对象的访问定位

一、句柄访问
在这里插入图片描述
2.直接指针(Hotspot采用)
在这里插入图片描述

相关内容

热门资讯

AGI的不归之途 AGI,即通用人工智能,正踏上一条不归之途。它犹如一艘在未知海域航行的巨轮,不断探索着智慧的边界。一...
欧盟起草对俄第18轮制裁措施 ... 来源:新华网新华社布鲁塞尔6月2日电(记者张兆卿)欧盟委员会2日发表声明说,欧盟正制定针对俄罗斯的第...
原创 心... 在现代商业环境中,烘焙行业作为食品产业的一个重要分支,正快速发展,面包作为其核心产品,备受瞩目。如今...
首次披露:五台山王黎明,已被查... 政事儿微信公号消息,据山西省纪委监委6月2日消息:日前,经山西省委批准,山西省纪委监委对五台山风景名...
深夜突发!关税升级,特朗普似乎... 当地时间6月2日,美股三大指数集体收涨,道指涨0.08%,纳指涨0.67%,标普500指数涨0.41...
年内创业板首批IPO获受理 创... 5月30日,陕西旅游、三瑞智能、宏明电子、大亚股份4家公司IPO获得受理,创下2025年以来单日受理...
国金证券:创新药密集获批 后续... 智通财经APP获悉,国金证券发布研报称,国家药监局批准11 款全新创新药的上市申请,另外还有2款创新...
美国房地产经纪公司Redfin... 观点网讯:6月2日,美国房地产经纪公司Redfin最新统计数据显示,美国待售房屋总价值高达6980亿...
移出经营异常名录不留痕 监管有... 汪昌莲近日,市场监管总局印发《关于贯彻落实有关事项的通知》,对已经移出经营异常名录的经营主体,不再公...
美股三大指数飘红,白银期货飙涨...   中新经纬6月3日电 美股三大指数低开,盘中走势转强,集体收红。道指收涨0.08%,纳指涨0.67...
特朗普升级贸易战 欧盟警告:可... 财联社6月3日讯(编辑 夏军雄)当地时间周一(6月2日),欧盟警告称,如果美国总统特朗普兑现其最新的...
每经实探|网红家装企业“住范儿... “(端午节)放假前,每天有百把号人来找(住范儿)呢,欠了不少钱。”6月1日下午,《每日经济新闻》记者...
BD交易大爆发,今年总额已超4... 一笔笔BD(business development,业务发展)交易订单让中国创新药又香了起来。据澎...
美股零日期权大热!特朗普交易再... 刚过去的5月,在特朗普政府推迟贸易谈判期限,并与多个主要贸易伙伴展开积极对话后,市场风险偏好有所改观...
海昌海洋公园即将易主?祥源集团... 6月2日,海昌海洋公园控股有限公司(海昌海洋公园,02255.HK)发布公告,由祥源集团间接全资控制...
鲍威尔出席美联储国际金融司活动... 美联储主席鲍威尔(Jerome Powell)周一在美联储国际金融司(IF)成立75周年活动上发表讲...
安联El Erian:美联储进... 知名投资管理公司安联(Allianz)首席经济顾问Mohamed El-Erian近日在《金融时报》...
国产豪车崩盘预警?亏损18亿,... 端午时节,华为发布了尊界S800,价格70.1-101.8W。一石激起千层浪,这个价格引起了巨大的争...
见证历史!新一轮货币战争在路上... 美元信誉持续受损。无论是沙特、还是俄罗斯,越来越多的国家对美国的36万亿美元债务表现出担忧。现在,中...
从一面之恩到千亿帝国CEO,安... 近日,吉利汽车管理层大调整引发行业聚焦。在吉利一季度财报发布的当天,吉利控股集团宣布重大人事调整:极...
智岩科技启动上市辅导 今年10...   近期,深圳智岩科技股份有限公司(以下简称“智岩科技”)正式启动上市辅导,辅导机构为中金公司。智岩...
银发跑者越跑越快,还最能“买买... 文/段修健近日,国家体育总局体科所中国体育经济研究中心发布《中国路跑人群消费与赛事经济发展趋势与特征...
【美股】美股走“V”全线收涨 ... 6月2日,美股走V全线收涨。道指涨0.08%,报42305.48点,收复早盘约1%跌幅并录得三连涨;...
涉嫌虚假记载细节曝光,锦富技术... 锦富技术5月30日晚公告称,公司当日收到中国证监会下发的《行政处罚事先告知书》。锦富技术披露的202...
6.3股市早8点丨三天假发生了... 三天假发生了啥事?股市早8点 老沙自媒体2025年6月3日(周二)每日大道正道消息▊美股小涨北京时间...
绿通科技:拟现金收购大摩半导体... 【绿通科技筹划收购大摩半导体不低于51%股权】6月2日晚间,绿通科技公告,筹划现金收购江苏大摩半导体...
股市必读:爱博医疗(68805... 截至2025年5月30日收盘,爱博医疗(688050)报收于71.41元,下跌1.76%,换手率1....
销售会“提问”,再冷淡的客户,... 回复“9”限时领《9套销售话术资料包》 作者:Dora 在销售咨询过程中,“高效提问”不仅是获取客户...
原创 德... 2025年2月24日,恰逢俄乌冲突爆发三周年,德国也于前一天举行了新一轮的议会选举。在过去的三年中,...
明天沪主板新股海阳科技申购!聚... 明天,沪主板将迎来一家新股申购! 格隆汇获悉,海阳科技(603382)于6月3日申购,发行价格为11...