【jvm】new对象的过程

embedded/2024/11/26 9:06:37/

目录

          • 1. 说明
          • 2. 类加载
          • 3. 对象创建
          • 4. 返回对象引用

1. 说明
  • 1.在Java中,使用new关键字创建对象的过程是一个复杂而精细的过程,它涉及多个步骤,包括类加载、内存分配、初始化等。
2. 类加载
  • 1.加载:Java虚拟机(JVM)通过类加载器将类的字节码文件加载到内存中。类加载器会根据类的全限定名查找对应的字节码文件,并将其转换为一个Class对象。这个Class对象包含了类的结构信息,如类的成员变量、方法、构造函数等。
  • 2.验证:JVM验证加载的字节码文件是否符合Java虚拟机规范,以确保其安全性和正确性。
  • 3.准备:为类的静态变量(无final修饰)和常量(final修饰)赋默认初始值。静态变量被初始化为默认值(如int为0,boolean为false),而常量则直接赋予其初始值。
  • 4.解析:将类文件中的符号引用替换为直接引用,如类、方法的信息、文本字符串等。
  • 5.初始化:通过类的构造器进行初始化,包括执行静态代码块和给静态变量赋予正确的值。
3. 对象创建
  • 1.内存分配:在堆内存中为对象分配一块连续的内存空间。这块空间用于存储对象的实例变量和相关信息。内存分配策略可能包括指针碰撞空闲列表两种方式,具体取决于堆内存的规整程度。
  • 2.指针碰撞:如果堆内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器。所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离。
  • 3.空闲列表:如果堆内存中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,JVM就必须维护一个列表,记录上哪些内存块是可用的。在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录。
  • 4.属性初始化:将对象的内存空间初始化为默认的零值。基本类型的实例变量会被初始化为对应类型的零值(例如,整型为0,布尔型为false),而引用类型的实例变量会被初始化为null。
  • 5.显示初始化:根据对象的类调用对应的构造函数,对对象进行初始化。构造函数会根据定义的参数列表执行一系列操作,例如初始化实例变量、执行其他方法等。这一步是对象定制化的过程,使得每个对象都有其独特的属性和状态。
4. 返回对象引用
  • 1.构造函数执行完毕后,JVM将对象的引用返回给使用new关键字创建对象的代码。
  • 2.后续的代码就可以通过该引用访问对象的实例变量和方法了。

http://www.ppmy.cn/embedded/140581.html

相关文章

AI服务器核心部件产业链升级分析

AI服务器核心部件产业链剖析(2024) "本文探讨了AI服务器的产业链,涵盖了芯片CPU、GPU,内存DRAM和HBM,本地存储SSD,NIC、PCIe插槽、散热等关键元素。同时,对服务器CPU架构进行了深度剖析,包括X86、ARM、MIPS和RISC…

弹幕发送功能‘简单’实现

导入依赖 <!-- websocket弹幕依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>后端代码 package com.by.danmaku;import org.springfra…

信创改造 - TongRDS 安装方式之控制台安装【Window】

安装前准备 安装 jdk1.8 即可&#xff0c;并配上 环境变量 安装 1&#xff09;解压缩 2&#xff09;启动 进入安装路径的console\bin目录&#xff0c;在cmd命令行窗口运行console.bat 输入序号 1 如果想查看运行状态&#xff0c;可以重新执行 console.bat&#xff0c;然后输…

【基础算法】链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并 K 个升序链表5.K 个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNo…

深度学习(1)

一、torch的安装 基于直接设备情况&#xff0c;选择合适的torch版本&#xff0c;有显卡的建议安装GPU版本&#xff0c;可以通过nvidia-smi命令来查看显卡驱动的版本&#xff0c;在官网中根据cuda版本&#xff0c;选择合适的版本号&#xff0c;下面是安装示例代码 GPU&#xff…

python从入门到精通:pyspark实战分析

前言 spark&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成本上千的服务器集群&#xff0c;计算TB、PB乃至E…

SOL 链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

从零开始打造个人博客:我的网页设计之旅

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…