对象实例化

创建对象的方式

  1. 使用new关键字
  2. Class的newInstance();
  3. Constructor的newInstance();
  4. 使用clone();方法
  5. 对象反序列化

注:前三个会调用构造函数,后两个不会。

创建对象的步骤

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

  2. 为对象分配内存(内存规划与并发问题)

  3. 初始化(所有属性设置默认值,保证对象的实例属性不赋值可直接使用)

  4. 设置对象头

  5. 执行init方法初始化

对象的内存布局

image-20201116205538656

image-20201116205552066

对象的访问与定位

句柄访问

image-20201116205753071

直接指针

image-20201116205802784

执行引擎

image-20201116212053763

简介

执行引擎是Java虚拟机核心的组成部分之一,“虚拟机”是一个相对于”物理机“的概念,这两钟机器都有代码执行能力,物理机执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,能够执行硬件不支持的指令集格式。

任务

将字节码指令解释/编译成对应平台上的本地机器指令,即将字节码指令翻译为机器指令。输入是字节码二进制流,输出的是执行结果。

工作过程

image-20201116212237168

字节码执行过程

image-20201116212749868

解释器

​ 当java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容”翻译”为对应平台的本地机器码执行。

JIT(Just In Time Compiler)

​ 即时编译器:就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。

执行引擎参考

解释器与JIT参考

源代码到机器码过程的三种编译器

参考链接

前端编译器

java代码-》字节码

JIT编译器

字节码-》机器码

AOT编译器

java代码-》机器码