JAVA对象的生命周期(二)-对象的创建
对象创建的几种方式
- new
- clone
- newInstance
- 反序列化
- String s = "abc"(这个是比较特殊的)
背景:接下来看下JAVA对象创建的整个过程,要理解每一步的意义,平时对基础知识还是要查缺补漏呀。先来看下整过过程的步骤。

类加载检查。
- 常量池定位new指令参数的符号引用
- 检查这个符号引用是否被类加载,解析和初始化过,如果没有先进行类加载过程
内存分配
- 类加载过后对象所需的内存大小就能确定
- 分配方式分为以下两种,基本原则是依据垃圾收集器是否压缩整理功能决定。
- 指针碰撞,规整的内存区域沿一个方向移动指针分配即可
- 空闲列表:JVM中记录一个已使用的列表,分配后再更新列表。
- 内存分配的并发问题的两种方案
- CAS+失败重试,CAS是一种乐观锁,每次不加锁而假设没有冲突的去完成某项操作,如果冲突则重试,直至成功,来保证原子性,缺点就是会出现频繁重试以至于浪费内存
- TLAB:为每个线程先分配一段内存,JVM再给线程中的对象分配内存是现在TLAB中分配,当对象需要的内存大于TLAB时,再采用上述的CAS机制分配对象内存
初始化零值
- 内存分配完成后,虚拟机需要将分配的内存空间都初始化零值(不包括对象头)
设置对象头
- 初始化零值之后,虚拟机要对对象进行必要的设置,例如设置这个对象是哪个类的实例,如何找到类的元数据信息,对象的hash码,对象的GC分代年龄等,这些信息都是存放在对象头中。
执行init方法
- 上面工作做完后,在虚拟机角度这个对象实例已经创建完成,但是从java程序看来对象的生命周期才刚刚开始。
- 执行INIT方法来按照程序员的意愿来初始化对象中变量的初值
至此一个对象实例已经创建完成
JAVA对象的生命周期(二)-对象的创建的更多相关文章
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...
- java之hibernate之session中对象的生命周期
1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...
- Javascript - Vue - vue对象的生命周期
vue对象的生命周期 从vue的创建到销毁会经过一系列的事件,这是vue对象的生命周期. 创建期间的生命周期函数 <div id="box"> <h3 id ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java 对象的生命周期
Java对象的生命周期 在Java中,对象的生命周期包含下面几个阶段: 1. 创建阶段(Created) 2. 应用阶段(In Use) 3. 不可见阶段(Invisib ...
- Java虚拟机(三)垃圾标记算法与Java对象的生命周期
前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的生命周期. 1.垃圾收集器概述 垃圾收集器( ...
- Java对象的生命周期与作用域的讨论(转)
导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对 ...
- Hibernate中Java对象的生命周期
一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...
- 【转载】Java对象的生命周期
Java对象的生命周期 在Java中,对象的生命周期包括以下几个阶段: 1. 创建阶段(Created) 2. 应用阶段(In Use) 3. 不可见阶段(Invisib ...
- 《深入理解Java虚拟机》 Java对象的生命周期
Java虚拟机运行时数据区 方法区:存储 类信息.常量.静态变量.即使编译器编译后的代码等数据,也有别名叫做非堆. 方法区其中有包含有 运行时常量池,用于存放编译期生成的各种字面量和符号引用.其中, ...
随机推荐
- linux线程调度策略
linux线程调度策略 这是一篇非常好的关于线程调度的资料,翻译自shed 目录 linux线程调度策略 Scheduling policies SCHED_FIFO: First in-first ...
- 工单 工序外协 更改PR/PO
工序外协详解介绍'https://blog.csdn.net/weixin_43814706/article/details/113586961' 需求:创建工序委外的工单时更改对应PR/PO 行文本 ...
- 去除elementUI中tab组件中的下划线
<div class="right-tabbox-newnotice"> <el-tabs v-model="activeName" @tab ...
- TienChin 渠道管理-渠道导出
ChannelController /** * 导出渠道列表 */ @PreAuthorize("hasPermission('tienchin:channel:export')" ...
- 【Java 进阶】详细探究 Spring 框架中的注解与反射
[进阶]Spring中的注解与反射 目录 [进阶]Spring中的注解与反射 前言 一.内置(常用)注解 1.1@Overrode 1.2@RequestMapping 1.3@RequestBody ...
- MetaGPT( The Multi-Agent Framework):颠覆AI开发的革命性多智能体元编程框架
"MetaGPT( The Multi-Agent Framework):颠覆AI开发的革命性多智能体元编程框架" 一个多智能体元编程框架,给定一行需求,它可以返回产品文档.架构设 ...
- 【深度学习项目一】全连接神经网络实现mnist数字识别
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...
- C/C++ Crypto密码库调用方法
Crypto 库是C/C++的加密算法库,这个加密库很流行,基本上涵盖了市面上的各类加密解密算法,以下代码是我在学习是总结的,放到这里用于后期需要时能够快速解决问题. 项目地址:https://www ...
- 认识3D模型-GLTF文件
GLTF文件格式 glTF的全称(Graphics Language Transmission Format)图形语言传输格式.是三维场景和模型的标准文件格式. glTF 核心是 JSON 文件,描述 ...
- 阿里二面:SpringBoot可以同时处理多少个请求?当场懵了。。。。
SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利.然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重 ...