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中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...
Java 中的 ClassLoader Java 中的 ClassLoader 是一个非常重要的组件,它负责动态加载 class 文件到虚拟机当中,并将其转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类,因此我们可以...
类加载器(`ClassLoader`)是Java运行时环境的一部分,它的主要职责是从文件系统或网络中获取字节码,将其转换为`Class`对象,并在Java虚拟机中运行。Java中的类加载机制遵循“按需加载”原则,即只有当程序真正需要...
Java中ClassLoader类加载学习总结 ClassLoader类加载是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制字节流“的目的。类加载器的基本模型就是双亲委派...
破解java加密的ClassLoader.java,在classloader植入破解代码
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...
Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...
本Demo程序主要探讨的是Java中的ClassLoader等级关系,这一主题对于理解Java应用程序的运行机制至关重要。 首先,我们要了解ClassLoader的基本概念。在Java中,ClassLoader是一个系统组件,它根据指定的全限定类名...
Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...
在 Java 语言中,类加载器(ClassLoader)是 Java 运行时环境的核心组成部分之一,它负责将编译后的 `.class` 文件加载到 JVM 中执行。从 JDK 1.0 开始,随着 Java Applet 的出现以及网络应用的需求增加,类加载机制...
Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...
### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...
让Java支持热加载是个不错的想法。如何做到的呢? 1. 定义好接口和实现类 2. 让代理类通过反射的方式调用实现类,对外暴露的是代理类。 3. 自定义URLClassLoader。检查实现类.class文件的...Java自定义classloader;
ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。ClassLoader 使用了双亲委托模式进行类加载,每一个自定义的 ClassLoader 都必须继承 ClassLoader 这个抽象类,而每个 ClassLoader ...
在 Java 虚拟机(JVM)中,类加载器(ClassLoader)扮演着非常重要的角色。类加载器负责加载 Java 类,包括核心类和用户自定义类。在 JVM 运行过程中,类加载器会形成一个层次结构,包括引导类加载器(Bootstrap ...
### Java虚拟机中ClassLoader概述与双亲委托机制详解 #### 一、ClassLoader概念与作用 在Java编程语言中,`ClassLoader`是一个非常重要的组件,它负责加载程序运行所需的类文件到Java虚拟机(JVM)中。`ClassLoader`...