在我们科学技术与经济水平均高速发展的今天,掌握一门新兴技术对于每一个有志青年来说都是十分重要的。今天主要为大家详细介绍一下java的关键技术强化——类加载器,以及通过示意图展示它的结构。
首先为大家简述什么是类加载器。从它的名称我们就可以看出来,类加载器就是用来加载Class文件到JVM,以供程序使用的。java的类加载,都是通过类加载器完成的。
然后说一下怎么创建类加载器。当java运行class文件时,java运行程序会尝试找到JRE安装的所在目录,然后寻找jvm.dll(默认安装在bin\client目录中),紧 接着启动JVM并进行初始化的工作,之后产生Bootstrap Loader,Bootstrap Loader会加载Extended Loader和AppClass Loader。Bootstrap Loader是Extended Loader的parent Loader。Extended Loader是AppClass Loader的parent Loader。
再为大家介绍一下java内置的ClassLoader :
第一种是Bootstrap Loader(引导类加载器)。它的实现依赖于底层操作系统,由C编写而成,没有继承于ClassLoader类。根类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。默认为jre目录下的lib目录下的class文件,该加载器没有父加载器。负责加载虚拟机的核心类库,如java.lang.*。Object类就是由根类加载器加载的。
第二种是Extended Loader(标准扩展类加载器)。它的父加载器为根类加载器。由java编写而成,是ClassLoader的子类。它从java.ext.dirs中加载类库,或者从JDK安装目录jre\lib\ext子目录下加载类库。如果把用户创建的jar文件放在该目录下,也会自动由扩展类加载器加载。
第三种是AppClass Loader(应用程序类路径类加载器)。它的父加载器为扩展类加载器。由java编写而成,是ClassLoader的子类,它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,是用户自定义的类加载器的默认父加载器。
接下来让我们了解一下类加载器工作原理。每个类加载器会先将加载类的任务交给其parent,如果parent找不到,再由自己负责加载。
所以在加载类时,会以Bootstrap Loader→Extended Loader→AppClass Loader的顺序来寻找类,如果找不到,就会丢出NoClassDefFoundError。
我们通过一张图片来展示类加载器树状组织结构:
最后说一下类的死亡。类也能被垃圾回收。类被回收的条件有两个:如果程序没有对Class对象保持明确的引用且堆中没有一个此类的对象。
上文主要为大家概述了java类加载器主要包括了哪些内容,以及通过树状结构示意图生动地为大家展示了出来。想要了解更多java基础,敬请关注奇Q工具网。
推荐阅读: