JVM的类加载器

什么是类加载器

在类加载过程的加载阶段,通过类的完全限定名,获取描述类的二进制流的实现类,被称为“类加载器

类加载器分类

从JVM 虚拟机的角度来讲,只存在以下两种不同的类加载器

启动类加载器 ( Bootstrap classLoader ) ,使用 C++ 实现,是虚拟机的部分;

其它类的加载器,使用 java 实现,独立于虚拟机,继承自抽象类 java.lang.ClassLoader 。

但从程序员的角度来看,存在三种

启动类加载器( Bootstrap classLoader ) ,该类加载器负责将存放在<IREHOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的并且是虚拟机识别的(仅按照文件名识别,如 rt.jar ,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。例如 java.util.*, java.io.**, java.lang.* 类等常用基础库都是由启动类加载器加载启动类加载器无法被 java 程序直接引用。

扩展类加载器 (Extension ClassLoader) ,该类加载器是由 ExtclassLoader (sun.misc.Launcher$ExtClassLoader ) 实现,负责将 <JRE HOME>/lib/ext 或者被 java.extdir 系统变量所指定路径中的所有类库加载到内存中,例如 swing 系列、内置的 js 引擎、xm 解析器等以 javax 开头的扩展类库都是由扩展类加载器加载,开发者可以直接使用扩展类加载器

应用程序类加载器( Application classLoader ) ,该类加载器是由 AppclassLoader ( sun.misc.Launcher$AppClassLoader ) 实现。由于这个类加载器是 classLoader 中的getsystemclassLoader() 方法的返回值,因此也被称为系统类加载器。它负责加载用户类路径(classPath ) 上所指定的类库比如: 我们自己编写的自定义类或第三方 jar 包。开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值