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().
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗