文章目录
- 请描述new一个对象的流程
- JVM创建对象的过程
- 检查加载
- 分配内存
- 内存空间初始化
- 设置
- 对象初始化
请描述new一个对象的流程
JVM创建对象的过程
当JVM遇到一条new指令时,它需要完成以下几个步骤:
- 类加载与检查
- 内存分配
- 并发安全性
- 内存空间初始化
- 设置对象信息
- 对象初始化
下图展示了JVM创建对象的过程:
虚拟机遇到一条new
指令时,首先检査是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。类加载就是把class
加载到JVM
的运行时数据区的过程。
检查加载
首先检査这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检査类是否已经被加载、解析和初始化过。
-
符号引用
以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,JAVA在编译的时候一个每个
java
类都会被编译成一个class
文件,但在编译的时候虚拟机并不知道所引用类的地址(实际地址),就用符号引用
来代替,而在类的解析阶段
就是为了把这个符号引用
转化成为真正的地址
的阶段。总结一句话就是:在编译阶段,Java源代码中的类、方法和字段用符号引用来表示。在运行