JVM学习-对象实例化、内存布局、访问定位

对象实例化

在这里插入图片描述

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

在这里插入图片描述

public class Customer {
    int id = 1001;
    String name;
    Account acct;
    {
        name = "张三";
    }
    public Customer() {
        acct = new Account();
    }
}
class Account {

}
//
public class CustomTest {
    public static void main(String[] args) {
        Customer cust = new Customer();
    }
}


在这里插入图片描述

对象访问定位
对象访问方式
  • 句柄访问
    在这里插入图片描述

  • 直接指针
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/649710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【源码+文档+调试讲解】可信捐赠系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统可信捐赠系统信息管理难度大,容错率低&#x…

【基于Fluent和深度学习算法驱动的流体力学计算与应用】

在深度学习与流体力学融合的背景下,科研边界不断拓展,创新成果层出不穷。从物理模型融合到复杂流动模拟,从数据驱动研究到流场智能分析,深度学习正以前所未有的力量重塑流体力学领域。目前在Nature和Science杂志上发表的深度学习驱…

香橙派 Kunpeng Pro 上手初体验

香橙派 Kunpeng Pro 上手初体验 目录 香橙派 Kunpeng Pro 上手初体验1.前言2.开箱3.开发板资源介绍硬件规格参数外观规格参数4.系统环境搭建系统镜像烧录ssh连接5.简单测试6.总结 1.前言 我很荣幸能收到了来自CSDN的测评邀请,让我有机会对香橙派最新推出的Kunpeng …

10个最佳人物素材网站推荐,免费获取第一个PNG文件!

人物素材是设计中应用最广泛的元素之一。无论是网页设计还是移动终端设计,人物素材的插画设计都比文字信息更容易吸引用户的注意力。作为内容呈现,还可以增加设计的艺术属性。为了节省大家寻找人物素材的时间成本,本文立即为大家整理了10个宝…

ARM IHI0069F GIC architecture specification (8)

3.2中断旁路支持 CPU interface可以支持中断信号旁路,使得当接口发出的中断信号被禁用时,传统中断信号被传递到PE上的中断请求输入,从而绕过GIC功能。 是否支持旁路由实际设计决定。 用于确定是否使用GICv3 FIQ和IRQ输出或旁路信号的控制取决…

Xinstall地推效果大揭秘:洞察用户需求,创新营销策略不再是难题

在互联网流量红利逐渐衰退的今天,企业如何快速搭建起满足用户需求的运营体系,成为了亟待解决的问题。特别是在地推领域,如何在多变的互联网环境下,迅速、有效地触达用户,扩大目标用户基数和流量池,成为了企…

计算机类主题会议推荐之——ACAIB 2024

【北方民族大学40 周年校庆学术活动】 第四届自动化控制、算法与智能仿生学术会议(ACAIB 2024) 2024年6月7-9日 中国银川 往届均已见刊检索 EI、SCOPUS双检索 基本信息 会议官网:www.acaib.org 最终截稿时间:2024年6月3日晚23:…

自定义CSS属性(@property)解决自定义CSS变量无法实现过渡效果的问题

且看下面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>demot</title&g…

HX-100调频广播覆盖专用天线

HX-100全向天线是北京恒星科通科技发展有限公司自主研发的一款隧道专用宽带调频发射天线&#xff0c;采用圆盘形结构、振子采用铝合金材料制造&#xff0c;具有增益高、功率容量大、工作频带宽、安装方便、防腐防潮、抗风性能好等特点&#xff0c;特别适合隧道调频广播覆盖、地…

多语言跨境电商源码:迅狐系统的创新融合

在全球化经济的浪潮中&#xff0c;跨境电商正成为连接不同国家和地区消费者的重要桥梁。迅狐多商户跨境电商商城系统&#xff0c;以其创新的技术解决方案&#xff0c;将传统销售模式与新型电商营销手段完美融合&#xff0c;为用户和技术商提供了一个多语言、多功能的跨境电商平…

预防侵权知识丨什么是图形商标?怎么用产品图片进行图形商标查询检索?

图形商标查询检索是跨境电商预防侵权中重要的一环&#xff0c;但是有很多卖家对图形商标不太了解&#xff0c;也不知道怎么进行图形商标的查询检索。所以&#xff0c;我们一起来看下。 一、什么是图形商标 图形商标是商标的一种&#xff0c;指的是由几何图形或其它事物图案构…

一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

链动3+1模式:引领企业创新发展的全新商业模式

在数字化时代&#xff0c;企业正积极寻求创新策略以应对竞争激烈的市场环境。链动31模式&#xff0c;作为一种前沿的商业模式&#xff0c;为企业带来了全新的发展机遇。本文将对链动31模式进行深度剖析&#xff0c;并与传统的链动21模式进行对比&#xff0c;以展现其独特魅力和…

C语言-信号

信号 一、信号是什么东西 信号是事件发生时通知进程的一种机制&#xff0c;有时也称之为软件中断。 信号的到来会打断了程序执行的正常流程。 大多数情况下&#xff0c;无法预测信号到达的精确时间。 一个&#xff08;具有合适权限的&#xff09;进程能够向另一进程发送信…

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 目前&#xff0c;模型最全的网站是HuggingFace&#xff0c;但是国内需要魔法流量才能访问。另外&#xff0c;现在大模型权重文件都较大&#xff0c;也会浪费不少流量&#xff0c;因此这里推荐使用魔搭社区下…

如何画泳道图?

一、绘制泳道图 1、新建一个绘图&#xff0c; 工具箱搜索“泳道图” 2、修改泳道图标题及风格 3、绘制基本的流程图 4、导出Visio格式 选择文件导出&#xff0c;visio格式

实时工业数据采集分析平台:推动工厂智能化的关键

在当今的工业领域&#xff0c;随着科技的飞速发展和竞争的日益激烈&#xff0c;实现工厂的智能化已成为企业追求持续发展的关键目标。而实时工业数据采集分析平台作为推动工厂智能化的重要力量&#xff0c;正发挥着重要的作用。 实时工业数据采集分析平台能够全方位、高精度地…

switch-case语句——kettle开发17

switch case组件的主要三大部分包括switch判断的字段&#xff0c;类似于前面说到的表达式&#xff0c;然后选择case值的数据类型&#xff0c;建议使用整形&#xff0c;因为这样运行速度相对更高&#xff0c;然后就是case 值分组标志&#xff0c;即case值0时输出一个结果&#x…

JWT-登录后下发令牌

后端 写一个jwt工具类&#xff0c;处理令牌的生成和校验&#xff0c;如&#xff1a; 响应数据样例&#xff1a; 前端要做的&#xff1a;

C++模版初阶STL简介

目录 1.泛型编程 2.函数模版 2.1概念 2.2格式 2.3原理 2.4函数模版的实例化 2.5模版参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 1.泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;l…