`
sean2012
  • 浏览: 46425 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Class加载机制——加载器类型

阅读更多
Class加载机制——加载器类型


        在JVM中有三种类型的Class加载器,如图所示:



引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用C++实现的,我们无法访问到。

扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。是用Java来实现的。

系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。


一、三个加载器工作流程
1、一个Class加载,先从引导类加载器开始,如果引导类加载器不能加载则交给扩展加载器;
2、如果扩展类加载器不能加载再交给系统类加载器(也称为应用类加载器);
3、直到加载成功。


二、加载器的特点
1、可以决定一个Class的加载过程;

2、相同全名称的两个类,可以通过使用不同加载器来共存在内存中;

3、引导类加载器很好的保护了Java核心类不受干扰;



三、获取Class的加载器
实例:
package com.sean.jvm;

public class Test01 {
	public static void main(String[] args) {
		try {
			Class clas1 = Class.forName("java.lang.String");
			Class clas2 = Class.forName("com.sean.jvm.Test01");
			System.out.println("clas1-->" + clas1.getClassLoader()+"就是");
			System.out.println("clas2-->" + clas2.getClassLoader());
			System.out.println("clas2的父级加载-->"+ clas2.getClassLoader().getParent());
			System.out.println("clas2的父级的父级加载-->"+ clas2.getClassLoader().getParent().getParent());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}


输出结果:
clas1-->null
clas2-->sun.misc.Launcher$AppClassLoader@281d4b
clas2的父级加载-->sun.misc.Launcher$ExtClassLoader@19b5217
clas2的父级的父级加载-->null




我们可以根据java.lang.Class<T>类中的getClassLoader() API文档可知,当返回的是Null时,表示采用了引导类加载器。

四、ClassLoader的应用
1、可以决定自己的Class的加载过程
2、可以给Class加密,防止反编译






  • 大小: 42.7 KB
  • 大小: 24.1 KB
分享到:
评论

相关推荐

    Java反射机制——类的加载方法,创建对象,获取方法以及结构

    - **方式四**:利用类加载器`ClassLoader`加载,这通常用于自定义加载机制。 4. **类加载器** - **Bootstrap ClassLoader**:引导类加载器,加载JDK的核心类库,如`rt.jar`。 - **Extension ClassLoader**:扩展...

    【JVM】类的奇幻漂流——类加载机制探秘

    【JVM】类的奇幻漂流——类加载机制探秘 Java虚拟机(JVM)是运行Java程序的核心组件,它负责将我们编写的类加载到内存中并执行。类加载机制是JVM的一个重要组成部分,它确保了程序的正常运行。本文将带你深入理解...

    深入java虚拟机(六)——类加载的父亲委托机制1

    父亲委托机制的核心思想是:当一个类加载器接收到加载类的请求时,它不会立即自己尝试加载,而是把这个任务委托给它的父类加载器。如果父类加载器能够加载该类,那么就由父类加载;如果父类加载器无法加载,子类加载...

    Java类动态加载(一)——java源文件动态编译为class文件

    首先,我们需要理解Java的类加载机制。Java的类加载是通过ClassLoader实现的,每个类在被使用之前都会由ClassLoader查找并加载。ClassLoader有三个基本职责: 1. 加载:寻找并加载类的字节码。 2. 验证:确保加载的...

    Java之——类热加载

    当类被加载时,类加载器会查找并读取类的字节码文件(.class),将其转换为内部数据结构,并存储在方法区。在类加载过程中,我们可以利用这个机制实现热加载。 2. 类加载器 Java的类加载器分为Bootstrap ...

    2021Java大厂面试题——大厂真题之携程-Java高级.pdf

    #### 二、类加载器的具体概念及类型 **1. 类加载器的定义** 类加载器是一个用于加载类文件的Java类。Java源代码经过编译后生成的`.class`文件包含了可执行的字节码。类加载器的作用是将这些类文件加载到JVM中,...

    坚持写博客第一周--java基础知识回顾--jvm类加载1(csdn)————程序.pdf

    类加载器是实现类加载过程的关键角色,主要有四种类型的类加载器: - **引导类加载器**(Bootstrap ClassLoader):负责加载JVM运行必需的核心类库,如rt.jar,这部分由C++实现,不在Java代码中直接可见。 - **...

    JVM学习笔记(一)——类的加载机制

    类加载机制遵循双亲委派模型,即当一个类加载器收到加载类的请求时,它首先会委托父类加载器尝试加载,只有当父类加载器无法加载时,子类加载器才会尝试加载。这样可以避免类的重复加载,保证核心类库的唯一性。 4...

    Java有根儿:Class文件以及类加载器.doc

    Java的类加载机制遵循双亲委派模型,即从顶层的启动类加载器开始,向下逐级加载。这样可以防止类的冲突,并确保核心库的安全性。 在深入学习ClassLoader时,我们需要理解类加载的生命周期,包括加载、验证、准备、...

    Java类加载原理解析文档

    此外,还有一个特殊类型的类加载器——线程上下文类加载器,稍后会单独讨论。 类加载器之间遵循双亲委派机制。这意味着当一个类加载器收到加载类的请求时,它会先委托给其父类加载器尝试加载。只有当父类加载器无法...

    Java类加载原理解析

    此外,还存在一种特殊的类加载器——**线程上下文类加载器(Thread Context ClassLoader)**,它允许在特定线程中定制类加载行为,常用于插件系统和容器环境。 **双亲委派机制** Java 类加载的默认策略是双亲委派...

    2015-11-ClassLoaders-Selajev.pdf

    自定义类加载器可以继承抽象类java.lang.ClassLoader,并重写findClass()方法来实现自定义的类查找和加载机制。使用自定义类加载器可以用于实现类隔离、热替换代码等高级功能。 类加载器的设计允许Java应用使用多...

    JAVA反射机制-Class类-Class对象的获取.pdf

    ### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...

    深入java虚拟机(二)——类的生命周期(上)类的加载和连接1

    Java源代码经过编译后生成`.class`文件,这些字节码文件由类加载器读取。类加载器不仅限于本地磁盘上的文件,还可以从网络或动态生成。一旦加载,类的信息会被存储在JVM的方法区。 2. **连接**: 连接阶段分为三...

    类加载说明.pdf

    本节介绍了一种特殊的类加载器——编译时类加载器。这类加载器能够在加载类之前自动编译源代码。这对于动态语言或需要即时编译的场景非常有用,比如当开发者希望在运行时修改某些行为而不需要重新编译整个项目时。 ...

    java基础——————试题库

    - Class类:代表运行时的类信息,可以动态加载类、创建对象、获取方法和字段。 - 构造器、方法、字段的invoke()方法:在运行时调用对象的方法或构造器。 16. **泛型** - 泛型引入了类型参数,提供更强的类型检查...

    3.java程序运行机制(csdn)————程序.pdf

    当遇到新的类引用时,JVM会通过类加载器查找对应的`.class`文件并加载到内存中。 5. **字节码验证**:JVM在运行字节码之前会进行安全检查,确保代码不会执行恶意操作。 6. **解释与优化**:早期的JVM是完全解释...

    java反射机制 字符串——java对象

    DOM解析器将整个XML文档加载到内存中,形成一棵树形结构,便于遍历和操作;SAX解析器则采用事件驱动的方式,逐行读取XML文件,适用于处理大型XML文件;StAX介于两者之间,允许程序员以流式方式读写XML文档,既能控制...

    java杂谈——一个计算机专业学生几年的编程经验汇总谈

    在Java中,类加载由类加载器(Class Loader)完成,而类加载器分为三个层次:Bootstrap ClassLoader、Extension ClassLoader 和 Application ClassLoader。 1. **Bootstrap ClassLoader**:负责加载位于`&lt;JAVA_HOME&gt;\...

Global site tag (gtag.js) - Google Analytics