IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中一个对象的创建过程 -> 正文阅读

[Java知识库]Java中一个对象的创建过程

Java中一个对象的创建过程

step1:检查该类是否被加载

当JVM执行一条new指令时,首先要去常量池中查找该类的符号引用。

当在常量池中查找到该类的符号引用,就说明该类已经被类加载(方法区保存了该类的类加载信息),就可以继续执行后续操作。

当在常量池中查找不到该类的符号引用,说明该类还没有被类加载,因此就要用类加载器执行该类的类加载过程。类加载完毕后执行后续操作。

step2:为对象分配内存

类加载之后,就要为新生对象分配内存空间。对象的大小在类加载的过程中就已经确定。分配空间有两种方式:1.指针碰撞;2:空闲列表。选择那种分配方式取决于堆内存是否规整,而堆内存是否规整取决于GC使用的垃圾回收器是否有压缩整理功能。

内存分配方式

1.指针碰撞:将用过的内存放在一边,没用过的内存放在另一边。中间有一个分界指针。需要分配内存时,将指针想没用过的内存方向移动对应内存大小的位置即可。这种情况适用于内存绝对规整。

2.空闲列表:JVM维护了一个列表,记录那些内存块未被使用。当需要分配内存时,JVM选择一块合适大小的内存块分配给对象,并更新空闲列表。该方法适用于内存不规整的情况。

线程安全问题

1.采用同步方法,使用CAS来保证操作的原子性。

2.TLAB:每个线程现在eden区分配一小块内存,JVM在给对象分配内存时,首先在TLAB分配。当对象大于TLAB中剩余内存时,采用CAS进行内存分配。

step3:初始化零值

内存分配完毕后,将对象的内存空间初始化为零值,这样即使对象没有被赋初值,也能够被直接使用。

step4:设置对象头

分配完内存空间,初始化零值之后,虚拟机还需要对对象进行其他必要的设置,设置的地方都在对象头中,包括这个对象所属的类,类的元数据信息,对象的hashcode,GC分代年龄等信息。

step:5:执行init方法

执行完以上步骤之后,在JVM层面,一个对象就算创建成功了。但是从Java程序层面,对象的创建才刚开始。对象的所有字段还都为零值。这时候调用init的方法,按照意愿对对象初始化,调用init方法之后对象才算真正创建成功。
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:27:07  更:2021-11-12 19:28:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:42:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码