类加载
生命周期:加载、验证、准备、解析、初始化、使用、卸载
加载
分两类加载器
启动类加载器 :hotSpot
其他类加载器:自己写的类继承ClassLoader,启动类加载器后才能加载其他类
- 在执行非置信代码之前,自动验证数字签名。
- 动态地创建符合用户特定需要的定制化构建类。
- 从特定的场所取得 java class,例如数据库中和网络中。
启动类加载器:
bootstrap classLoader(启动类加载器) 加载jdk类库 lib
Extension classloader(扩展类加载器)加载ext
Application ClassLoader(应用加载器)用户指定的classPath路径
验证
保证是否是符合jvm的要求,是否有危害
准备
正式为类变量(static类型)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配
1、仅为static类变量分配内存
2、初始值是数据类型默认的零值
解析
解析动作主要针对类或接口、字段、类方法、接口方法四类符号引用进行
初始化
最后一个阶段,到初始化阶段,才真正开始执行类中的 Java 程序代码。
四种情况必须立即对类进行初始化
遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时
使用 Java.lang.refect
当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
虚拟机启动时,用户需要指定一个要执行的主类,虚拟机会先执行该主类。