JVM的2种类加载器

JVM的2种类加载器

前言:要想在大JAVA邻域有所建树,JVM是必须要懂的。然而要领悟JVM,它的类加载器更应理解了。所以一来为了自己以后看,二来也希望可以帮到有相同需要的同仁。我就写了这个博客,不周之处还望指正,共同切磋交流。
首先来理清一下概念,所谓的类加载器(class loader):就是用来加载java类到java虚拟机中。其实这就是java与C或C++的区别,java程序并不是一个可执行的文件,它由许多的类文件组成。每一个类文件对应一个Java类。那么是不是运行时把他们全都加入到内存中呢?答案是:NO。它们是根据需要来逐渐加载
以是否是自带来划分,类加载器分为2种:
(1)JVM自带类加载器:
<1>根类加载器Bootstrap(它是用C++写的):引导类装入器是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
<2>扩展类加载器Extension(它是java写的):扩展类加载器是由SunExtClassLoadersun.misc.Launcher$ExtClassLoader实现的。它负责将< Java_Runtime_Home >/lib/ext或者由系统变量-Djava.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
<3>系统类加载器System(它是java写的):是由 Sun AppClassLoadersun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径java -classpath或-Djava.class.path变量所指的目录下的类库加载到内存中。开发者可以直接使用系统类加载器。
(2)自定义类加加载器:
不好列举,但都是java.lang.ClassLoader的子类,好处在于可以定制类的加载方式。

为了大家好理解,我找了个图:
图 1. 类加载器树状组织结构示意图
类加载器树状组织结构示意图






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值