jvm(一):java的类加载机制

一、类生命周期

java代码经过编译生成.class二进制文件,通过类加载器加载到jvm中运行,最后不需要的时候被回收,这是一个jvm整体运行的一个情况。

jvm运行.png

类加载进jvm后又经过怎么一个过程呢?


类加载的过程.png

加载:一个类什么时候加载进来呢?在使用它的时候才会加载进来,比如main方法里面调用。加载的时候如果当前类有父类,需要将父类也加载进来。

验证:必要的数据检验。检查是否合法啊,可能字节码里被可以篡改了。

准备:给类分配空间,以及静态变量分配空间并赋初始值。

解析:将符号引号替换为直接引用。

初始化:给静态变量赋值正确的初始值。

二、类加载器

java的类加载器分为启动类加载器、扩展类加载器、应用类加载器、自定义加载器。


类加载器.png
  • 启动类加载器:负责加载/jre/lib下的核心类库
  • 扩展类加载器:负责加载/jre/lib/ext下的类库
  • 应用类加载器:可以认为是加载自己写的类
  • 自定义加载器:也可以自己定义加载类的规则

三、双亲委派机制

当加载类的时候,不是直接自己进行加载,而是问父加载器能不能加载,一直向上询问,直到根加载器,当父加载器不能加载的时候再向下进行尝试加载。
意义:防止出现同样多份的字节码。

你可能感兴趣的:(jvm(一):java的类加载机制)