Java中的Classloader简介
Java程序并不是本地可执行程序,它运行时首先启动JVM(Java虚拟机),然后把类(由Java源码编译生成的class)文件装载到JVM中,再运行。负责装载类文件的程序叫——ClassLoader,我们把装载类文件的方式、方法称为Java的类装载机制。
ClassLoader的组成与结构
ClassLoader的组成结构是JVM在安全性和网络移动性上发挥重要作用的一个方面,所谓一图胜千言,让我们从下图开始了解其组成结构吧:
共有4中不同类型的ClassLoader,它们会分别加载不同路径下的类文件,以下是它们的简单说明:
-
BootstrapLoader(启动类装载器)
:是JVM本地代码实现的一部分,负责加载核心Java类库——位于%JAVA_HOME%\jre\lib\下的*.jar文件,大部分都是以java.*作为包的类,在执行java.exe时可以使用-Xbootclasspath选项或-Dsun.boot.class.path选项,指定要附加加载的类。
-
ExtensionLoader(扩展类装载器)
:它由启动类装载器(BootstrapLoader)加载,负责装载扩展类库——位于%JAVA_HOME%\jar\lib\ext\目录下,或java.ext.dirs属性指定位置的*.jar文件,大部分都是以javax.*作为包头开始的类。
-
AppClassLoader(应用程序类装载器)
:由启动类装载器(BootstrapLoader)加载,负责加载应用程序自身的类——
即
CLASSPATH环境变量、
-classpath命令行选项、或者java.class.path属性 所指向位置的jar包和类件。在程序中通过ClassLoader.getSystemClassLoader
方法
可以得到到该加载器。
-
CustomClassLoader(用户自定义类装载器)
:这是JVM类装载机制表现最灵活的部分,由开发者决定,可以从任何可能的位置读取.class文件并加载,例如可以通过网络动态加载类文件并执行。
以上4中类型的加载器互为父子关系,下层的子加载器会委托上层的父加载器加载某类,如果父加载器找不到(指定类),则子加载器尝试自己,这被称为委托加载模型
。该模型使得BootstrapLoader会抢先于ExtensionLoader之前去加载类,而ExtensionLoader会抢在AppClassLoader之前,AppClassLoader会抢在用户自定义类加载器之前,这有效的守护了被信任类库的边境,可以防止恶意代码伪装成基本类库。
在类加载过程中还在遵守一个原则——全盘负责原则
,是指当某ClassLoader载入一个类时,该类所依赖和引用的所有类也会由该ClassLoader负责加载,除非显式使用另外的ClassLoader。
最后达到的结果是:安全分隔
——在多个ClassLoader之间,每个ClassLoader都拥有自己的命名空间(NameSpace) 用于分隔彼此加载的类对象,也就是说所有被加载的类只能看到被同一个ClassLoader装载的 别的类,这达到了安全分隔的目地
。
分享到:
相关推荐
详细介绍java中的类加载器的使用,以及在在使用过程中需要注意的知识点
1.java classloader 的概述 2.java classloader 的分类 3.自定义 java classloader
java classloader classpath 张孝祥
Java中ClassLoader的解析,从ClassLoader的角度分析了JVM,装载类,创建类的对象的整个过程,更清晰的了解JVM的运行机制。
破解java加密的ClassLoader.java,在classloader植入破解代码
本篇文章主要给大家讲述了Java中ClassLoader类加载的原理以及用法总结,一起学习下。
深入了解Java_ClassLoader,Bytecde.pdf
Java ClassLoader定制实例
Java_ClassLoader详解,解说java类的加载的原理,让你轻松了解java的类加载
Java 虚拟机中ClassLoader 相关简介 双亲委托机制 Android 中ClassLoader 简介
让Java支持热加载是个不错的想法。如何做到的呢? 1. 定义好接口和实现类 2. 让代理类通过反射的方式调用实现类,对外暴露的是代理类。 3. 自定义URLClassLoader。检查实现类.class文件的...Java自定义classloader;
测试普通Java程序ClassLoader等级关系的Demo程序
理解Java ClassLoader机制
Sun 官方关于 ClassLoader原理的文章,值得一看
Java ClassLoader Tutorial
深入Java虚拟机_ClassLoader深入Java虚拟机_ClassLoader
NULL 博文链接:https://sbiigu.iteye.com/blog/260456
Understanding the Java ClassLoader
内容简介: ClassLoader体系结构 类装载器在JVM中并不是唯一的,JVM自带了三个装载器,用户也可以根据自己的需求自定义新的装载器,这些装载器的体系结构可以看作是树状结构,如图1所示: