对象的创建过程

2023-09-20 08:55:33

对象的创建过程

基于两个方面回答这个问题:

①jvm加载和分配内存。

②java对象初始化。

1.在实例化一个对象的时候,JVM首先会去检查目标对象是否已经被加载并初始化了

2.如果没有,JVM需要立刻去加载目标类,然后调用目标类的构造器完成初始化。①目标类的加载是通过类加载器来实现的,主要就是把一个类加载到内存里。②然后初始化的过程,主要是对目标类里面的静态变量、成员变量、静态代码块进行初始化。

3.当目标类被初始化以后,就可以从常量池里面找到对应的类元信息,并且目标对象的大小在类加载之后就已经确认了,所以这个时候就需要为新创建的对象,根据目标对象的大小在堆内存里面分配内存空间。内存分配的方式一般有两种,一种是指针碰撞,一种是空闲列表,JVM会根据java堆内存是否规整来决定内存分配方式。

4.接下来,JVM会把目标对象里面的普通成员变量初始化为零值,比如int类型初始化为0,对象类型初始化为null,(类变量在类加载的准备阶段就已经初始化过了)。

这一步操作主要是保证对象里面的实例字段,不用初始化就可以直接使用,也就是程序能够获得这些字段对应数据类型的零值。

然后,JVM还需要对目标对象的对象头做一些设置,比如对象所属的类元信息、对象的GC分代年龄,hashcode,锁标志等等。

完成这些步骤之后,对jvm来说,新对象的创建工作已经完成。但是对于java语言来说,对象创建才算开始。

接下来要做的,就是执行目标对象内部生成的init方法,初始化成员变量的值、执行构造块、最后执行目标对象的构造方法,完成对象的创建。其中init方法是java文件编译后在字节码文件中生成的,它是一个实例构造器,这个构造器会把语句块、变量初始化、调动父类构造器等操作组织在一起。所以调用init方法能够完成一系列的初始化动作。

在这里插入图片描述

更多推荐

QT 信号与槽

QT核心便是信号与槽,通过信号将数据在界面和类中,在本类和其他类中发送和接收。信号负责发送数据(也可以单纯的发送信号),槽负责接收。系统自定义的槽在相应组件上单机右键转到槽即可看见这列表,例如:一般按钮事件的点击(clicked),松开(released),按下(pressed)等。选择相应的槽,那么它会自动帮你做上个

基于SpringBoot的民宿管理平台系统的设计与实现

博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻不然下次找不到哟Sp

VR虚拟仿真在旅游课堂教学演示

首先,VR虚拟仿真能够为学生提供逼真的旅游体验。传统的旅游课堂教学主要以图片、文字和视频为主要教学工具,这无法给学生带来身临其境的感觉。而VR技术能够通过360度全景视角、立体声音和触觉反馈等功能,将学生置身于虚拟的旅游场景中。无论是登上古老的埃及金字塔,在巴黎卢浮宫欣赏名画,还是漫步在纽约时代广场的繁华街头,学生可以

Mysql高级——索引优化和查询优化(2)

5.排序优化5.1排序优化问题:在WHERE条件字段上加索引,但是为什么在ORDERBY字段上还要加索引呢?优化建议:SQL中,可以在WHERE子句和ORDERBY子句中使用索引,目的是在WHERE子句中避免全表扫描,在ORDERBY子句避免使用FileSort排序。当然,某些情况下全表扫描,或者FileSort排序不

关于安卓SVGA浅尝(二)加载数据

关于安卓SVGA浅尝(二)加载数据相关链接SVGA官网SVGA-github说明文档背景项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中用到了svga的动画,因此,就有了这一系列的文章。实现对于svga的加载方法,有以下几种:(1)decode

VR全景智慧文旅解决方案,助力文旅产业转型升级

引言:随着科技的不断发展,虚拟现实(VR)技术正逐渐展露其影响力,改变着旅游业。VR全景智慧文旅解决方案也应运而生,将传统旅游的体验形式从线下扩展到了线上,带来了不一般的文旅体验。一.VR全景技术的基础VR全景技术是通过结合虚拟现实和全景摄影技术来模拟现实世界的方法。通过智能设备,游客可以在任何时间,任何地点进入逼真的

5个超实用的Python代码片段

迷途小书童读完需要7分钟速读仅需3分钟本篇收集了5个常用的Python代码片段,非常实用,可以帮助我们更高效的编写代码,实现我们想要实现的功能。1密码生成器importrandomimportstringtotal=string.ascii_letters+string.digits+string.punctuatio

内网横向移动

内网横向移动当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。攻击机:KaliLinux靶机:Windowsserver2008WEB10.10.10.20\192.168.XX.XX(跳板机)Windowsserver2012DC10.10.10.10\192.

RS485总线浪涌解决方案!|深圳比创达EMC

在各种通讯方式当中,RS485总线是较为常见的一种,因其接口简单、系统运行稳定和通讯速率高等特点被广泛应用。但由于RS485总线一般传输距离较长,且经常暴露在外,所以非常容易受到电磁干扰,而浪涌干扰已经成为485通信使用中最常遇到的问题。下面通过一个实际案例,来说明RS485总线在防浪涌实验过程中,常遇到的问题以及需要

shell中[[]]与[],=、==和-eq的辨析

1、==、=和-eq在shell中,=和==运算符都可以用于判断两个字符串、两个字符串变量是否相同,==支持模式匹配,而=不支持模式匹配。使用-eq来判断两个整数是否相等。#字符串比较#给变量赋值时,等号前后没有空格,有空格时是条件判断string1=abcstring2=bcd#["$string1"="$strin

基座向量施密特正交化

最近再次细细的阅读了向量施密特正交化,重新系统梳理一下一、正交基地与向量的正交分解二、基化成标准正交基,是什么意思将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足两个条件:彼此之间两两正交(即内积为零);归一化(长度为1)。这样的转换可以用来简化向量空间中的运算,使得向

热文推荐