返回
类de加载过程分析(一)runtime初始化
IOS
2023-11-13 10:04:23
Java虚拟机(JVM)是一个可执行的程序,它负责加载和执行class文件。class文件是Java源代码编译后的结果,它包含了Java程序的所有信息。当JVM加载一个class文件时,它会先执行类加载过程,然后执行类初始化过程。
类加载过程
类加载过程主要包括以下几个步骤:
- 读入class文件
- 格式化class文件
- 类初始化
类初始化过程
类初始化过程主要包括以下几个步骤:
- 初始化静态变量
- 执行代码块
初始化静态变量
静态变量是指使用static声明的变量,它们在类加载时就存在,并且只能被该类的所有对象共享。静态变量的初始化顺序与它们在类中的声明顺序一致。
执行代码块
代码块是指使用{}括起来的代码段,它们在类加载时执行。代码块的执行顺序与它们在类中的声明顺序一致。
runtime初始化
runtime初始化是指在类加载过程中执行的初始化过程。runtime初始化主要包括以下几个步骤:
- environ_init
- static_init
- runtime_init
- exception_init
- _dyld_objc_notify_register
environ_init
environ_init函数是runtime初始化的第一个步骤,它主要完成以下几个任务:
- 设置环境变量
- 初始化进程堆栈
- 初始化信号处理程序
static_init
static_init函数是runtime初始化的第二个步骤,它主要完成以下几个任务:
- 初始化静态变量
- 执行代码块
runtime_init
runtime_init函数是runtime初始化的第三个步骤,它主要完成以下几个任务:
- 初始化堆内存
- 初始化垃圾回收器
- 初始化JIT编译器
exception_init
exception_init函数是runtime初始化的第四个步骤,它主要完成以下几个任务:
- 初始化异常类
- 初始化异常处理机制
_dyld_objc_notify_register
_dyld_objc_notify_register函数是runtime初始化的第五个步骤,它主要完成以下几个任务:
- 注册Objective-C运行时环境
- 注册Objective-C异常处理机制
总结
runtime初始化是类加载过程中的一项重要任务,它主要完成静态变量的初始化和代码块的执行。runtime初始化的顺序是固定的,并且不能被改变。