一般来说,我们把Java的类加载过程分为三个主要步骤:加载、链接、初始化。
首先是加载阶段,它是Java把字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据机构(Class对象)
加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。
第二阶段是链接,这是核心的步骤,简单来说把原始的类定义信息平滑地转入JVM运行的过程中。这里可以细分为三个步骤:
验证,虚拟机安全的重要保障,JVM需要核验字节信息是符合Java虚拟机规范的。防止恶意信息
准备,创建类或接口中的静态变量,并初始化静态变量的初始值。重点在于分配所需要的内存空间。
解析,在这一步会将常量池中的符号引用替换为直接引用。
最后是初始化阶段,这一步真正去执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块的逻辑。
双亲委派模型,简单说就是类加载器试图加载某个类型的时候,除非父加载器找不到相应类型,否则尽量将这个任务代理给当前加载器的父加载器去做。使用委派模型的目的是避免重复加载Java类型。
首先是加载阶段,它是Java把字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据机构(Class对象)
加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。
第二阶段是链接,这是核心的步骤,简单来说把原始的类定义信息平滑地转入JVM运行的过程中。这里可以细分为三个步骤:
验证,虚拟机安全的重要保障,JVM需要核验字节信息是符合Java虚拟机规范的。防止恶意信息
准备,创建类或接口中的静态变量,并初始化静态变量的初始值。重点在于分配所需要的内存空间。
解析,在这一步会将常量池中的符号引用替换为直接引用。
最后是初始化阶段,这一步真正去执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块的逻辑。
双亲委派模型,简单说就是类加载器试图加载某个类型的时候,除非父加载器找不到相应类型,否则尽量将这个任务代理给当前加载器的父加载器去做。使用委派模型的目的是避免重复加载Java类型。
上一题:CMS和G1有什么区别
下一题:类加载器有哪些?
标签: 加载、委派、初始化、jvm、静态
笔试题
刷题
简历模板
AI算法
大数据
内推
内推: