Java ClassLoader介绍
libai 发布于 2021-06-13

应用程序中的所有类文件不会在启动时加载到内存中,而是根据程序的需要按需加载,类的加载是由类加载器完成的。ClassLoader是JVM的一部分,它将类加载到内存中。

java类加载器是用java编写的(与C++中的JVM相反)。这意味着在需要时开发定制类加载器很容易,而不必了解JVM的细节。ClassLoader是一个抽象类,它是java.lang包的一部分。

一个应用程序可能需要不同的类才能在运行时正常运行,每当一个应用程序在运行时需要一个类时,ClassLoader都会查找给定的类名,如果找到它就会将它加载到内存中。一旦提供了要加载的类的名称,ClassLoader将尝试在不同的位置定位构成类定义的数据。

类加载器搜索的位置将按给定的顺序进行。

首先在JRE的lib/ext目录和系统范围的、特定于平台的扩展目录中查找JAR文件中的类。

然后在classpath中查找类(java.class.path属性)。classpath的默认值是current directory,但这个值可以用不同的方式更改。

Classloader的类型

引导类Classloader

它是超一流的装载机。它没有任何父类加载器。它在Java.lang、Java.util包中加载类Java的核心类。

扩展类Classloader

扩展类加载器将在JRE的lib/ext目录和系统范围内的特定于平台的扩展目录中加载JAR文件中的类。引导类加载器将是扩展类加载器的父级。开发人员可以在ext文件夹中手动添加jar,让扩展类加载器加载它。

系统类Classloader

系统类加载器将加载类路径中的类(java.class.path属性)。扩展类加载器是系统类加载器的父类。classpath的默认值是current directory,但这个值可以用不同的方式更改。
设置CLASSPATH环境变量。
通过-classpath或-cp命令行选项提供值。

自定义类Classloader

developeper还可以根据需要创建自定义类。

李白
关注 私信
文章
12
关注
0
粉丝
0