java虚拟机规范

https://github.com/waylau/java-virtual-machine-specification

 

一、程序的执行流程

https://docs.oracle.com/javase/specs/jls/se11/html/jls-12.html

1. 加载(load)

找到二进制数据,load到内存

2. 链接(link)

Verify, 检查数据格式,符号表,

Prepare, 静态变量分配空间,创建方法表,常量表。静态变量分配默认值

(Optionally) Resolve,解决类中对其他class的引用的load。此过程何时执行,取决于虚拟机实现策略,可以在link阶段就递归执行,也可以留到使用到的时候再执行。

3. 初始化(Initialize)

静态变量的初始化,静态区的执行,在执行本类的initialize之前,必须完成父类的初始化

什么时候触发初始化:

  • T is a class and an instance of T is created.
  • A static method declared by T is invoked.
  • A static field declared by T is assigned.
  • A static field declared by T is used and the field is not a constant variable

4. 实例化

1) 创建实例空间,包括父类的,变量赋给默认值

2) 递归初始化父类的成员,然后调用父类的构造函数

3) 初始化本类的成员,调用本类的构造函数。

5. finalize

垃圾回收时,类的finalize函数被垃圾回收线程调用,

6. 类卸载(unload)

只有当加载勒的加载器销毁之后,类才unload。一般不会用到。

7. 程序退出

所有非守护线程退出或者有线程主动调用System.exit().

posted @   bwuhpqt  阅读(228)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示