JVM-JAVA对象创建的五个步骤

实战系列-亿级流量秒杀系统JVM调优 导语   关于亿级流量的秒杀系统的调优,其实并不仅仅包括对于JVM的调优,还有包括网络调优、IO调优、负载均衡调优,缓存调优,中间件调优等等一些东西内容的调优计划,一个亿级流量的秒杀系统仅仅是通过JVM的调优来实现一个高性能真的它所起到的作用很小很小。只要有资金,可以把超级计算机改造成服务器。当然这个是开玩笑的。下面的博客中,这通过一个小例子来看看具体在支持秒杀系统流量的应用中怎么让Java应用程序达到一个最优的运行效果。 文章目录JVM性能调优引用和指针的区别与联系JVM堆内存调优Java 对象分配原. 阅读详情

对象创建的五个步骤

  • 1、类加载检查

虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。

总结为 if(new指令的参数不在常量池 || 此符号引用的类没有被加载、解析和初始化)--------->{执行相应类加载}

  • 2、分配内存

在类加载检查完成后,虚拟机为new出来的对象分配内存。
新对象需要的内存大小在类加载完成后就已经确定,现在要做的是吧一块确定大小的内存从Java堆中划分出来。
分配方式涉及到两种:
指针碰撞空闲列表
堆内存规整时堆内存不规整时
用过的内存放在一边,没用的放一边,中间有个分界值指针JVM维护一个列表记录划分的内存
GC收集器:Serial、ParNewGC收集器:CMS

堆内存规整与否取决于GC收集器的算法是标记-清除、还是标记-整理

创建对象时涉及到的问题:
线程安全:先TLAB再 CAS+失败重试
  • CAS+失败重试: CAS 是乐观锁的一种实现方式。所谓乐观锁就是,每次不加锁而且假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。虚拟机采用 CAS 配上失败重试的方式保证更新操作的原子性。
  • TLAB: 为每一个线程预先在 Eden 区分配一块儿内存,JVM 在给线程中的对象分配内存时,首先在 TLAB 分配,当对象大于 TLAB 中的剩余内存或 TLAB 的内存已用尽时,再采用上述的 CAS 进行内存分配
  • 3、初始化零值

内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这一步操作保证了对象的实例字段在 Java 代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。
  • 4、设置对象头

虚拟机要对对象进行必要的设置,例如这个对象是那个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。 这些信息存放在对象头中。 另外,根据虚拟机当前运行状态的不同,如是否启用偏向锁等,对象头会有不同的设置方式。
  • 5、执行init方法

经过1-4步骤,从JVM的角度看一个新的对象已经产生,但从Java程序上看,对象创建才刚开始。执行 new 指令之后会接着执行 方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完全产生出来。
利用LTspice设计Pt100测温电路 是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。 阅读详情

相关推荐

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

Java面向对象练习题含解析(三)

1、 如果类的成员被( )访问控制符来修饰,则这个成员只能被该类的其它成员访问,其它类无法直接访问。1分A、privateB、defaultC、protectedD、public参考答案:A【答案解析】如果类的成员被private访问控制符来修饰,则这个成员只能被该类的其它成员访问,其它类无法直接访问。类的良好封装就是通过private关键字来实现的。2、以下代码执行后的结果是:( ) public class Person { String name = “小芳”; publi

pattyi的博客 2万+

泛微OAe9实战:如何从零搭建一个车辆预约系统(附完整代码)

本文详细介绍了如何利用泛微OA e9的建模引擎,从零开始构建一个企业级车辆预约管理系统。文章深入解析了核心数据模型设计、前后端双重预约冲突校验机制,并重点演示了如何配置自定义资源看板以实现车辆使用状态的可视化监控。该系统设计思路通用,可扩展至会议室、设备等各类共享资源的管理。

weixin_28363123的博客 142

Java面试核心知识点1——JVM

1 JVM的运行机制 我们知道JVM是用于运行Java字节码的虚拟机,主要包括一套字节码指令集、一组程序计数器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。JVM运行在操作系统之上,不与硬件设备直接交互。 Java源文件(.java文件)通过编译器被编译成.class文件(字节码文件),.class文件又被JVM中的解释器编译成机器吗在不同操作系统上运行(Windows,Mac,Linux)。每种操作系统的解释器都是不同的,但是基于解释器的虚拟机是一样的,这也是为什么Java能够跨平台的原因

码代码的小朋友 312

STM32 AFIO时钟开启时机与复用功能解析

在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践

weixin_42389113的博客 578

避免踩坑!杰理AC63蓝牙名修改常见问题及解决方案(含BLE后缀处理)

本文详细解析了杰理AC63蓝牙设备名称修改的全过程,包括基础操作、BLE后缀处理及高级调试技巧。针对蓝牙名修改中的常见问题,提供了实用的解决方案和代码示例,帮助开发者避免踩坑并实现高效定制。

q6r7s8t9的博客 411

HotSpot虚拟对象(对象创建 内存分配 栈上分配 TLAB 对象内存布局和对象访问等 )

对象的创建 整个对象的创建过程如下所示: 首先进行类加载的检查:虚拟机遇到new指令的时候,首先去检查该指令的参数是否能够在常量池中定位到这个类的符号引用,并且检查该符号引用代表的类是否已经被加载过、解析和初始化过。若没有,必须先执行相应的类加载的过程。 分配内存:类加载检查通过之后,虚拟机为对象分配内存。(内存大小在类加载完后就能确定)。分配的方式有“指针碰撞”和“空闲列表”两种,若java...

mulinsen77的博客 1204

Cheat Engine实战:多级指针逆向破解游戏内存的5个关键步骤(附C++模拟代码)

本文详细解析了使用Cheat Engine进行多级指针逆向破解游戏内存的完整流程。通过5个关键步骤,从定位动态地址到逐层追踪指针链,最终构建稳定指针路径。文章结合C++模拟代码,深入剖析了指针链的底层汇编原理,并提供了高级排查技巧,帮助读者掌握逆向工程中的核心内存追踪技术。

weixin_29239279的博客 306

JVM对象创建过程

问题:在语言层面,通过new一个关键字就可以创建一个对象,那么在底层jvm是如何进行一个对象的创的?? 1)首先程序计数器在收到这个new得到指令时候,先到方法区的常量池检查有没有这个类的符号引用,然后检查类是否加载解析初始化过没有就进行类加载 2)类加载完成后,JVM就要在java堆上为对象分配内存,这个内存大小是在类加载的时候就确定的,从java堆中分配内存有两种方式一个指针碰撞,一个空闲...

moyu的博客 1484

烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变智能电视的折腾记录

本文详细记录了烽火HG680-LC机顶盒刷机后的使用体验,通过安装当贝纯净桌面和讯飞语音助手,老盒子焕发新生,实现无广告、快速响应的智能电视功能。文章对比了刷机前后的性能差异,分享了影音播放、语音控制等实用功能,并提供了ADB调试和问题解决的实用技巧,帮助用户将闲置的运营商盒子变身为高性能的智能影音中心。

weixin_30292843的博客 469

计算机等级考试(二级WPS)---真题14套

目录 真题14一、选择题二、WPS文字三、WPS表格四、WPS演示21.打开考生文件夹下的素材文档 “WPS.docx”(.docx 为文件扩展名),后续操作均基于此文件,否则不得分。小周正在整理一份关于极光的文档,请按要求帮助她完成文档的排版工作。1.将全文中的手动换行符全部替换为中文句号并回车,删除文中的空行和空格。2.将正文第 2 段(“在我國的古書…… 極光”)中的繁体字转换成简体字,并为其设置 “正文” 样式。3.对文档样式进行如下设置:4.为 “1.3 极光的形态” 一节中列出的五种极光形态特征

2401_82750246的博客 1166

java新建对象校验,【判断题】创建对象时,jvm会找到对应的.java文件,通过.java文件创建对象。...

The only way to succeed at the highest level is to have total belief_____ you are better than anyoneThe fact has worried many scientists ________the earth is becoming warmer and warmer these years.A.w...

weixin_39865952的博客 633

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 527

java创建对象new后面为啥可以传入参数_你有认真了解过自己的“Java对象”吗?渣男...

对象在 JVM 中是怎么存储的对象头里有什么?作为一名 Javaer,生活中的我们可能暂时没有对象,但是工作中每天都会创建大量的 Java 对象,你有试着去了解下自己的“对象”吗?我们从四个方面重新认识下自己的“对象”创建对象的 6 种方式创建一个对象在 JVM 中都发生了什么对象在 JVM 中的内存布局对象的访问定位一、创建对象的方式使用 new 关键字这是创建一个对象最通用、常规的方法,同时也...

weixin_39771987的博客 150

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JVM02-JVM的对象创建以及访问方式

本文首先介绍了JVM中对象的创建过程,接着就是介绍对象的内存布局,最后就是说到了对象的访问方式,其中对象的创建过程比较重要的一块内容就是分配内存

码农飞哥 2436

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【JVM】请描述下JVM中对象创建需要的几个步骤?

请描述下JVM中对象创建需要的几个步骤? 答: 1)检查加载先执行相应的类加载过程。如果没有,则进行类加载。 2)分配内存分配方式两种:指针碰撞和空闲列表,java堆空间规整的话采用指针碰撞,不规整采用空闲列表 3)内存空间初始化JVM需要将分配到的内存空间都初始化为零值(如int值为0,boolean值为false等等)。 4)...

猫巳的博客 400

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

对象创建流程

Java 对象的创建过程从 “类的合法性校验” 到 “内存分配与安全控制”,再到 “底层初始化” 和 “业务初始化”,完整覆盖了从字节码指令到可用实例的全流程,既保证了 JVM 运行时的规范性,也满足了业务逻辑对对象状态的要求。

2301_80860862的博客 1090

JVM中对象的创建过程

参考书籍:《深入理解Java虚拟机》 参考博客:http://blog.youkuaiyun.com/tjiyu/article/details/53923392 下面我们详细了解Java程序中new一个普通对象时,HotSpot虚拟机是怎么样创建这个对象的,包括5个步骤:相应类加载检查过程、在Java堆中为对象分配内存、分配后内存初始化为零、对对象进行必要的设置、以及执行对象实例方法,最后我们再从JVM

yangyongUestc的博客 889

java对象的创建过程是怎样的?

2. 分配内存空间:在JVM的堆内存中为新的对象分配足够的、连续的内存空间。具体的方式有两种:"指针碰撞"和"空闲列表",选择哪一种主要取决于堆内存是否是规整的。3. 初始化对象:在内存分配完之后,JVM需要初始化这块内存空间,将其清零,并设置对象头信息(包括这个对象所属的类、哈希码、GC年龄等信息)。如果没有加载,就会先加载。以上就是Java对象的创建过程,但具体的实现过程可能因JVM的不同实现而略有差异。4. 设置对象引用:JVM会将这块内存的地址赋值给对象的引用变量。

周祥平程序专栏 1066

Java对象与JVM(一)  Java对象在Java虚拟机中的创建过程

           在《Java内存区域 JVM运行时数据区》文章了解到Java中几乎所有的实例对象存储在Java堆内存中。        下面我们详细了解Java程序中new一个普通对象时,HotSpot虚拟机是怎么样创建这个对象的,包括5个步骤:相应类加载检查过程、在Java堆中为对象分配内存、分配后内存初始化为零、对对象进行必要的设置、以及执行对象实例方法<init>,...

qq_38384440的博客 899

揭秘阿里巴巴面试:JVM创建对象,你了解几个步骤?

欢迎阅读本期文章!今天我们将揭秘阿里巴巴面试常见问题之一:JVM创建对象的五大步骤。作为一名程序员,深入了解这一过程,将为你在技术面试中锦上添花。让我们一起来探究这个引人瞩目的技术细节吧!

孤芳不自赏 995

构造函数,竟然是Java对象创建的最后一步?!

JVM步骤技术原理机器人工厂的比喻类加载检查确认类的元信息是否存在检查蓝图是否存在内存分配在堆上为对象划分空间在生产线上分配工位零值初始化将内存块清零为骨架喷涂一层中性底漆设置对象头写入对象的元数据刻上“身份铭牌”执行<init>调用构造函数,初始化字段进行总装,并最终激活。

郑龙飞 931

Java对象创建过程

STEP1:类加载检查 虚拟机遇到一条 new指令的时候,首先去常量池中检查该对象的符号引用,并检查该引用是否被加载过、初始化过、解析过。如果没有,就要去执行类加载过程。 STEP2:分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定。分配方式有两种:”指针碰撞”和“空闲列表”两种,选择那种分配方式由Java堆是否规整决定,而 Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能所决定。 指针碰撞: 适用场合:堆内存规整(没有内存...

qq_40262372的博客 286

【JVM】:java new一个对象背后发生了什么?

目录 前言 一、类加载(第1次使用该类) 二、创建对象 前言 java在new一个对象时,先检查对象所属的类有没有被加载到内存: 类没有加载到内存:通过【类到全限定名】加载,加载并初始化后,创建对象。 类已经加载到内存:创建对象。 假设该类第一次使用——new对象分为2个过程:加载并初始化类、创建对象 一、类加载(第1次使用该类) java使用双亲委派模型进行类加载,故先了解下“双亲委派模型” 双亲委派模型构造过程:如果一个类加载器ClassLoader收到类加载请求,它不会首先加

541

JAVA面试-JVM篇 07-对象在JVM中的创建过程是怎样的

对象创建五步中,内存分配和并发安全是面试追问的高频点。分配方式取决于 GC 收集器是否带压缩整理功能(指针碰撞 vs 空闲列表)并发安全通过 TLAB(首选)和 CAS(兜底)两种手段保证对象头是理解锁升级、GC 年龄的基础,Mark Word 在不同锁状态下复用存储空间。

fengyunhust的专栏 208

JVM 基础面试题总结

JVM 的主要作用是什么? JVM 就是 Java Virtual Machine(Java虚拟机)的缩写,JVM 屏蔽了与具体操作系统平台相关的信息,使 Java 程序只需生成在 Java 虚拟机上运行的目标代码 (字节码),就可以在不同的平台上运行。 请你描述一下 Java 的内存区域? JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的区域,这些组成部分有些是线程私有的,有些则是线程共享的,Java 内存区域也叫做运行时数据区,它的具体划分如下: 虚拟机栈: ...

qfguan的博客 512
上一篇: JAVA14新特性简单预览
下一篇: SpringBoot最简单介绍/优点
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值