本文共 1642 字,大约阅读时间需要 5 分钟。
Java 虚拟机(JVM)通过类加载机制,从描述类的Class文件中将描述类的数据加载到内存中,并对数据进行校验、转化、解析和初始化,最终生成可以直接运行的Java类型。这个过程依赖于运行时动态加载和动态链接两个特点。
类从被加载到虚拟机内存中到被卸载出内存的整个生命周期包括以下阶段:
加载(Loading)
虚拟机通过Class加载器获取类的二进制字节流,转化为方法区的运行时数据结构,并创建java.lang.Class对象作为访问入口。验证(Verification)
确保Class文件符合规范,不会危害虚拟机安全。分为文件格式验证、元数据验证、字节码验证和符号引用验证几大校验任务。准备(Preparation)
为类变量分配内存并初始化值。只包括static修饰的类变量,实例变量由对象实例化后自行处理。解析(Resolution)
将常量池中的符号引用替换为直接引用。初始化(Initialization)
执行类初始化代码。严格规定只有以下情况会触发类初始化:使用(Using)
从被加载到内存到卸载的使用阶段,类始终在虚拟机内存中。卸载(Unloading)
当无需使用该类时,虚拟机主动回收。JVM中的类加载器分为两类:Bootstrap ClassLoader(启动类加载器)由C++实现;其他类加载器由Java实现且继承自ClassLoader。
实现方式:每个类加载器都有一个父类加载器(除了Bootstrap ClassLoader)。类加载过程由顶层的启动类加载器完成,具体加载由子类完成。
###破坏双亲委派的方式
双亲委派机制可以被自定义化,常见方法包括:
通过破坏双亲委派,可以实现灵活的类加载策略,如隔离冲突或实现特定场景下的加载行为。
转载地址:http://mvdgz.baihongyu.com/