从出生到离世的生命历程是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计989个文字,预计阅读时间需要4分钟。
请简单描述一下对象的创建过程?
先看一张图+main方法中创建了两对象的执行过程在右侧字节码中展示完整过程:new、dup、invokespecial、astore四个步骤+1、new,虚拟机指令为对象分配内存
请简单阐述一下对象的创建过程?
先看一张图
main方法中创建了两个对象执行过程在右边字节码中展示完全一致new、dup、invokespecial、astore四个步骤
1、new,虚拟机指令为对象分配内存并在栈顶压入了指向这段内存的地址供后续操作来调用
2、dup,其实就是一个复制操作,其作用是把栈顶的内容复制一份再压入栈。jvm为什么要这么做呢
这完全是jvm自己编译优化的做法,再后续操作之前虚拟机自己会调用一次。我们都知道对象都有一个this的关键字指向对象本身,this是什么时候赋值的呢,就是这个时候
至于另一个引用当然是赋值给方法中的变量了
3、invokespecial,该过程是对实例对象进行初始化,第一步分配内存后对象内的实例变量都是初始值,在该步骤才会初始化对象内的实例变量
4、astore,方法内的变量指向内存中的对象
如何定位一个对象
1、直接定位也就是指针定位(hotspot使用方式),直接定位到实例对象内存地址。
本文共计989个文字,预计阅读时间需要4分钟。
请简单描述一下对象的创建过程?
先看一张图+main方法中创建了两对象的执行过程在右侧字节码中展示完整过程:new、dup、invokespecial、astore四个步骤+1、new,虚拟机指令为对象分配内存
请简单阐述一下对象的创建过程?
先看一张图
main方法中创建了两个对象执行过程在右边字节码中展示完全一致new、dup、invokespecial、astore四个步骤
1、new,虚拟机指令为对象分配内存并在栈顶压入了指向这段内存的地址供后续操作来调用
2、dup,其实就是一个复制操作,其作用是把栈顶的内容复制一份再压入栈。jvm为什么要这么做呢
这完全是jvm自己编译优化的做法,再后续操作之前虚拟机自己会调用一次。我们都知道对象都有一个this的关键字指向对象本身,this是什么时候赋值的呢,就是这个时候
至于另一个引用当然是赋值给方法中的变量了
3、invokespecial,该过程是对实例对象进行初始化,第一步分配内存后对象内的实例变量都是初始值,在该步骤才会初始化对象内的实例变量
4、astore,方法内的变量指向内存中的对象
如何定位一个对象
1、直接定位也就是指针定位(hotspot使用方式),直接定位到实例对象内存地址。

