一、类生命周期
java代码经过编译生成.class二进制文件,通过类加载器加载到jvm中运行,最后不需要的时候被回收,这是一个jvm整体运行的一个情况。
jvm运行.png类加载进jvm后又经过怎么一个过程呢?
类加载的过程.png
加载:一个类什么时候加载进来呢?在使用它的时候才会加载进来,比如main方法里面调用。加载的时候如果当前类有父类,需要将父类也加载进来。
验证:必要的数据检验。检查是否合法啊,可能字节码里被可以篡改了。
准备:给类分配空间,以及静态变量分配空间并赋初始值。
解析:将符号引号替换为直接引用。
初始化:给静态变量赋值正确的初始值。
二、类加载器
java的类加载器分为启动类加载器、扩展类加载器、应用类加载器、自定义加载器。
类加载器.png
- 启动类加载器:负责加载/jre/lib下的核心类库
- 扩展类加载器:负责加载/jre/lib/ext下的类库
- 应用类加载器:可以认为是加载自己写的类
- 自定义加载器:也可以自己定义加载类的规则
三、双亲委派机制
当加载类的时候,不是直接自己进行加载,而是问父加载器能不能加载,一直向上询问,直到根加载器,当父加载器不能加载的时候再向下进行尝试加载。
意义:防止出现同样多份的字节码。
网友评论