当前位置:网站首页>对象的创建
对象的创建
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直接把程序编译成与目标机器指令集相关的二进制代码。
边栏推荐
- ffmpeg 音频相关命令
- [SQL optimization] the difference between with as and temporary tables
- Reading the paper [learning to discretely compose reasoning module networks for video captioning]
- 下载(导出)pdf模板文件(比如:审批单),报错:Invalid nested tag *** found, expected closing tag ***
- 241. Different Ways to Add Parentheses
- Intensive cultivation of channels for joint development Fuxin and Weishi Jiajie held a new product training conference
- 精耕渠道共謀發展 福昕攜手偉仕佳傑開展新產品培訓大會
- Uni app product classification
- 简版拼多多商品数据
- Ubuntu14 install MySQL and configure root account local and remote access
猜你喜欢
DTD modeling
求各种极限的方法
Flutter 实战-快速实现音视频通话应用
Task: denial of service DOS
任务:拒绝服务DoS
The intelligent epidemic prevention system provides safety guarantee for the resumption of work and production at the construction site
大厂音视频职位面试题目--今日头条
[go ~ 0 to 1] day 5 July 1 type alias, custom type, interface, package and initialization function
【To .NET】C#集合类源码解析
Solidity - contract structure - error - ^0.8.4 NEW
随机推荐
Ffmpeg avframe to cv:: mat
微信小程序 navigator点击后有阴影 ,去掉navigator阴影效果
CMU AI PhD 第一年总结
118. 杨辉三角
English语法_形容词/副词3级 -注意事项
ES6中的代理proxy
【森城市】GIS数据漫谈(一)
正则表达式=Regex=regular expression
Shell advanced
Opencv video quality diagnosis - VIDEO occlusion diagnosis
精耕渠道共謀發展 福昕攜手偉仕佳傑開展新產品培訓大會
SIP protocol of gb28181
Enabling "new Chinese enterprises", SAP process automation landing in China
Live HLS protocol
AAAI2020: Real-time Scene Text Detection with Differentiable Binarization
Brpc understanding
wireshark报文分析tcp,ftp
optaplanner学习笔记(一)案例Cloud balance
The intelligent epidemic prevention system provides safety guarantee for the resumption of work and production at the construction site
任务:拒绝服务DoS