对象的实例化、内存布局

JVM-3 对象创建与执行引擎

对象创建的方式

  • new
  • Class 的newInstance() :反射的方式
  • Constructor 的newInstance(Xxxx) :反射的方式
  • clone():不调用构造器,但是要实现Cloneable()接口
  • 使用返序列化:
  • 第三方库

对象创建的步骤

1、判断对象对应的类是否加载、链接、初始化

2、为对象分配内存,

3、处理并发安全问题

4、初始化分配到空间

5、设置对象的对象头

6、执行init()方法进行初始化

对象的内存布局

JVM-3 对象创建与执行引擎
JVM-3 对象创建与执行引擎

对象的访问引用

思考:JVM是如何通过栈帧中的对象引用访问到其内部的实例对象呢

答:对象引用指向堆区,堆区内部的类型指针指向方法区内部的对象

执行引擎

任务是将字节码指令解释、编译为对应平台上的本地机器指令。

JVM-3 对象创建与执行引擎

执行引擎执行PC寄存器指向操作数栈中的指令。pc寄存器指向哪,执行引擎就在哪执行。

执行引擎运行有两种方式运行代码。

解释器

将字节码文件中的内容翻译成对应的本地平台机器指令。

效率低下

即时编译器(JIT)

将整个函数体编译成为机器码,每次函数执行时,只执行编译后的机器码即可。

速度快

为什么即时编译器执行速度快为什么还保留解释器呢?

程序运行后,解释器可以立马发挥作用,省去编译时间,立即执行。响应速度快

而JIT编译器需要将代码编译成本地机器指令。执行速度快

于是:在程序开始运行后,由解释器执行代码,提高响应速度。运行一段时间后,通过热点代码探测。将热点代码通过即时编译器解释成本地代码运行。

相关文章:

  • 2021-09-08
  • 2021-10-15
  • 2021-12-24
  • 2021-04-21
  • 2021-12-27
  • 2021-05-22
  • 2021-07-25
  • 2022-12-23
猜你喜欢
  • 2021-05-31
  • 2021-05-16
  • 2021-07-23
  • 2021-12-28
  • 2021-09-12
相关资源
相似解决方案