返回

类de加载过程分析(一)runtime初始化

IOS

Java虚拟机(JVM)是一个可执行的程序,它负责加载和执行class文件。class文件是Java源代码编译后的结果,它包含了Java程序的所有信息。当JVM加载一个class文件时,它会先执行类加载过程,然后执行类初始化过程。

类加载过程

类加载过程主要包括以下几个步骤:

  1. 读入class文件
  2. 格式化class文件
  3. 类初始化

类初始化过程

类初始化过程主要包括以下几个步骤:

  1. 初始化静态变量
  2. 执行代码块

初始化静态变量

静态变量是指使用static声明的变量,它们在类加载时就存在,并且只能被该类的所有对象共享。静态变量的初始化顺序与它们在类中的声明顺序一致。

执行代码块

代码块是指使用{}括起来的代码段,它们在类加载时执行。代码块的执行顺序与它们在类中的声明顺序一致。

runtime初始化

runtime初始化是指在类加载过程中执行的初始化过程。runtime初始化主要包括以下几个步骤:

  1. environ_init
  2. static_init
  3. runtime_init
  4. exception_init
  5. _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初始化的顺序是固定的,并且不能被改变。