当前位置:网站首页>对象的创建
对象的创建
2022-07-01 18:45:00 【辰 羽】
5、对象的创建
5.1、对象存储
对象创建后会存放在堆中,并产生一个内存地址。

在JVM中对象主要分三部分保存在堆中:
- 对象头:包括堆对象的布局、类型、GC的状态、同步状态和标识哈希等基本信息
- Mark Word:对象自身的运行时数据(哈希码、GC分代年龄、线程锁信息等)。在32位JVM中长度是32bit,在64位的JVM中是64bit。
- 类型指针:JVM通过类型指针确定该对象是哪个类创建的实例
- 数组长度(数组对象的)
- 实例数据:存放对象的属性值
- 对齐填充:为字节对齐,填充的数据,非必须。是为了让字段只出现在同一CPU的缓存行中
5.2、对象的创建过程
程序员编写一个类
.java文件编译为.class文件:首先通过Javac 编译器将.java 转为 JVM可加载的.class字节码文件
①词法解析器:通过空格分割出单词、操作符、控制符等信息,形成token信息流,传递给语法解析器。
②语法解析器:把token信息流按照Java语法规则组装成语法树。
③语义分析器:检查关键字使用是否合理、类型是否匹配、作用域是否正确等。
④生成字节码:将前面各个步骤的息转换为字节码。类加载的检查:虚拟机遇到关键字new,首先检查此指令对应的参数能否在常量池中定位到这个类的符号引用,并检查此符号引用代表的类是否被加载、解析和初始化过。如果没有则执行类加载。
类加载:将字节码文件放置到Java虚拟机中,通过类加载器加载。执行有三种模式,解释执行、JIT编译执行、JIT编译与解释器混合执行(主流JVM默认执行的方式)。混合模式的优势在于解释器在启动时先解释执行,省去编译时间。
确定类加载后,虚拟机为对象分配内存空间,分配方式有指针碰撞、空闲列表两种。
- 指针碰撞:堆的内存规整,使用过的内存划分到一边,空闲的在另一边,中间用一个指针为分界指示器,分配时把指向向空闲方向挪动相应大小距离
- 空闲列表:内存不规整,有碎片化,虚拟机需要维护一个列表记录那些内存可用,在分配时找到一个足够的空间进行分配,并更新列表记录。
而创建对象需要保证线程安全,通常采用两种方式
- CAS+失败重试:乐观锁的一种实现方式,假设没有冲突去创建,发生冲突就进行重试。
- TLAB:为每个线程在Eden去分配一块内存,在分配内存时首先在TLAB分配,对象大于TLAB中剩余内存或内存用尽时,再采用CAS。
初始化零值:虚拟机将分配的内存空间初始化为零值,保证对象实例字段正在Java中不赋初值就可以使用。
设置对象头:对象是哪个类的实例、找到不同的元数据、哈希吗、GC年龄等
执行init方法:将一个初始的对象按程序设计进行相关的初始化
通过即时编译器JT把字节码文件编译成本地机器码。
Java程序最初都是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁,就会认定其为”热点代码”,热点代码的检测主要有基于采样和基于计数器两种方式,为了提高热点代码的执行效率,虚拟机会把它们编译成本地机器码,尽可能对代码优化,在运行时完成这个任务的后端编译器被称为即时编译器。
还可以通过静态的提前编译器 AOT直接把程序编译成与目标机器指令集相关的二进制代码。
边栏推荐
- Interview question 16.16 Partial sorting - Double finger needling
- Reading the paper [learning to discretely compose reasoning module networks for video captioning]
- [SQL optimization] the difference between with as and temporary tables
- Task: denial of service DOS
- DDR4 test-2
- 微信小程序 navigator点击后有阴影 ,去掉navigator阴影效果
- Solution and summary of Nacos startup failure
- Helium transmission line of lake shore cryostat
- 为什么一定要从DevOps走向BizDevOps?
- 大厂音视频职位面试题目--今日头条
猜你喜欢

wireshark报文分析tcp,ftp
![Extensive reading of the paper [film: visual reasoning with a general condition layer]](/img/69/f4ba37a7eae34a7e698127c31b0161.png)
Extensive reading of the paper [film: visual reasoning with a general condition layer]

MySQl的基本使用

Uni app wechat applet one click login to obtain permission function

DTD modeling

音视频、编解码相关电子书、小工具,打包奉送!

奔赴山海之前,毕业季一定要做的那些事情

Why must we move from Devops to bizdevops?

Solidity - contract structure - error - ^0.8.4 NEW

Summary of SQL query de duplication statistics methods
随机推荐
brpc理解
Summary of SQL query de duplication statistics methods
English语法_形容词/副词3级 -注意事项
wireshark报文分析tcp,ftp
Collation of open source protocols of open source frameworks commonly used in Web Development
Learning notes [Gumbel softmax]
大厂音视频职位面试题目--今日头条
Wireshark packet analysis TCP, FTP
商业智能BI开发和报表开发有什么本质区别?
Les canaux de culture intensive s'efforcent de développer Fu Xin et Wei Shi jiajie pour organiser une conférence de formation sur les nouveaux produits
Instagram 为何从内容共享平台变成营销工具?独立站卖家如何利用该工具?
Transaction isolation level gap lock deadlock
Basic knowledge of audio coding and decoding
事务隔离级别 gap锁 死锁
win10下使用msys+vs2019编译ffmpeg源码
【org.slf4j.Logger中info()方法】
Write it down once Net travel management background CPU Explosion Analysis
H264 encoding profile & level control
[go ~ 0 to 1] day 4 June 30 defer, structure, method
ffmpeg AVFrame 转 cv::Mat