Java类加载

类加载器

概念

Java类加载器负责将编译好的Java class文件加载到JVM中的运行时数据区域,供执行引擎调用。

分类

  • 启动类加载器:BootClassLoader
  • 扩展类加载器:ExtClassLoader -> PlatFromClassLoader(JDK1.9后)
  • 应用类加载器:AppClassLoader

启动类加载

Java虚拟机启动后创建的第一个类加载器,由C++语言实现,所以再Java代码中查看其信息时,均为null。

加载路径:$JAVA_HOME/jdk1.8/jre/lib

扩展类加载器

由启动类加载器加载,并将扩展类加载器中parent的值置为null,表示指向启动类加载器,同时继承URLClassLoader。

加载路径:$JAVA_HOME/jdk1.8/jre/ext

系统类加载器

由启动类加载器加载,并将系统类加载器中的parent的值置为扩展类加载器,同时继承URLClassLoader

加载路径:classpath

双亲委派机制

JVM加载class类文件到虚拟机时,默认首先采用系统类加载器去加载用到的class类,采用的是双亲委托加载机制。

所谓双亲委托,顾名思义,就是当前类加载器(以系统类加载器为例)在加载一个类时,委托给其双亲(注意这里的双亲指的是类加载器中parent属性指向的类加载器)先进行加载。

双亲类加载器在加载时同样委托给自己的双亲,如此反复,直到某个类加载器没有双亲为止(通常情况下指双亲为null,也即为当前的双亲为扩展类加载器,其parent为启动类加载器),然后开始在依次在各自的类路径下寻找、加载class类

其他

class文件生成jar文件命令

jar -cvf  xxx.jar  xxx.class  xxx.class ...
posted @ 2021-03-01 22:59  main(0)  阅读(66)  评论(0编辑  收藏  举报