`
stone2oo6
  • 浏览: 26096 次
社区版块
存档分类
最新评论

ClassLoader机制

    博客分类:
  • JVM
阅读更多

JVM在运行时会产生三个ClassLoader
1.Bootstrap ClassLoader
  c++编写的启动JVM时调用的类加载器,主要用来加载JRE_HOME/lib当前目录下的核心jar,例如:rt.jar,jsse.jar等。
2.Extension ClassLoader
  用来加载JRE_HOME/lib/ext当前目录下核心扩展的jar,例如:dnsns.jar等
3.AppClassLoader 
  AppClassLoader是加载Classpath下所有的jar和classes

  这3种ClassLoader的优先级依次从高到低,使用所谓的“双亲委派模型”。确切地说,如果一个类装载器被请求装载一个java.lang.Integer,它会首先把请求发送给上一级的类路径装载器,如果返回已装载,则该类装载器将不会装载这个java.lang.Integer,如果上一级的类路径装载器返回未装载,它才会装载java.lang.Integer。
  类似的,类路径装载器收到请求后(无论是直接请求装载还是下一级的ClassLoader上传的请求),它也会先把请求发送到上一级的标准扩展类装载器,这样一层一层上传,于是Bootstrap ClassLoader优先级最高,如果它按照自己的方式找到了java.lang.Integer,则下面的ClassLoader 都不能再装载java.lang.Integer,尽管你自己写了一个java.lang.Integer,试图取代核心库的java.lang.Integer是不可能的,因为自己写的这个类根本无法被下层的ClassLoader装载。这也是所谓的“沙箱”原理。

public class TestLoader {
	public static void main(String[] args) {
		Class clazz = null;
		ClassLoader clazzLoader = ClassLoader.getSystemClassLoader();
		System.out.println("ClassLoader.getSystemClassLoader() = " + clazzLoader);
		while (clazzLoader != null) {
			clazzLoader = clazzLoader.getParent();
			System.out.println(clazzLoader);
		}
		System.out.println("end while.");
		
		try {
			clazz = Class.forName("java.lang.Object");
			clazzLoader = clazz.getClassLoader();
			System.out.println(" java.lang.Object's loader is  " + clazzLoader);

			clazz = Class.forName("sun.net.spi.nameservice.dns.DNSNameService");
			clazzLoader = clazz.getClassLoader();
			System.out.println(" sun.net.spi.nameservice.dns.DNSNameService's loader is  "
							+ clazzLoader);

			clazz = Class.forName("test.TestLoader");
			clazzLoader = clazz.getClassLoader();
			System.out.println(" test.TestLoade's loader is  " + clazzLoader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

分享到:
评论

相关推荐

    理解Java ClassLoader机制

    Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...

    java ClassLoader机制及其在OSGi中的应用

    Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...

    ClassLoader机制详解

    Java ClassLoader机制是Java虚拟机(JVM)中至关重要的组成部分,它负责加载类到内存中以便执行。ClassLoader的工作方式和层次结构对于理解和调试Java应用程序尤其是涉及到类动态加载的场景至关重要。 首先,...

    Java Classloader机制用法代码解析

    Java Classloader 机制用法代码解析 Java Classloader 机制用法代码解析是 Java 编程语言中的一种机制,负责加载 Java 类文件到 Java 虚拟机中。本文将对 Java Classloader 机制进行详细的解析,包括 JDK 默认的 ...

    java ClassLoader机制详细讲解

    Java的ClassLoader机制是Java运行时环境的核心组成部分,它负责加载.class文件到JVM(Java Virtual Machine)中,以便程序能够使用这些类。ClassLoader的主要任务是将类的二进制数据转换为可执行的Java对象。它使得...

    ClassLoader运行机制 自己写的

    理解ClassLoader的工作机制对于深入掌握Java应用程序的运行至关重要。这里我们将详细讨论ClassLoader的运行机制,特别是自定义ClassLoader的设计与实现。 ClassLoader的基本职责是根据类名动态加载对应的类文件。在...

    探究java的ClassLoader及类变量初始化顺序

    总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程技能的重要步骤。通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。

    JAVA工程师实习一周总结.doc

    学习 Java 虚拟机和 ClassLoader 机制可以帮助我们更好地理解 Java 程序的运行机制和类加载机制。同时,学习自定义类加载器也可以扩展我们的知识面和实践能力。 总结 这篇文章介绍了 Java 工程师在实习期间的学习...

    Tomcat 5.0.18 ClassLoader source code insight

    尤其是Tomcat的ClassLoader机制,它是Java类加载的核心部分,对于理解和解决类加载问题至关重要。本文将围绕“Tomcat 5.0.18 ClassLoader源码”进行深入探讨。 ClassLoader在Java中承担着加载类到JVM中的任务,它的...

    ava的ClassLoader介绍.doc

    总的来说,理解并掌握Java的ClassLoader机制对于开发复杂的、动态的Java应用程序至关重要。它不仅可以帮助你更好地控制类的加载过程,还能实现如动态代码更新、模块化系统等高级功能。通过编写自定义ClassLoader,...

    深入理解ClassLoader工作机制.docx

    《深入理解ClassLoader工作机制》 Java虚拟机(JVM)中的ClassLoader是负责加载类到内存中的核心组件。它不仅承担着将字节码转换为可执行对象的重任,还参与了类生命周期的各个阶段,包括加载、验证、准备、解析、...

    Tomcat研究之ClassLoader.pdf

    在深入了解Tomcat的工作原理时,一个重要的组成部分就是其ClassLoader机制。本文旨在深入剖析Tomcat中特有的类加载器(ClassLoader)体系结构,帮助读者理解Tomcat如何管理和加载不同类型的类库。 #### 二、Tomcat...

    2022年JAVA工程师实习一周总结.docx

    本文档总结了作者在2022年的一周JAVA工程师实习经验,涵盖了实习的适应阶段、JAVA虚拟机、ClassLoader机制等知识点。 一、实习的适应阶段 在实习的适应阶段,作者认为最重要的转变就是看法的变换。作为一名新人,...

    深入解析Java中的Classloader的运行机制

    总结起来,Java中的Classloader机制是JVM能够正确运行和管理应用程序的关键部分。它通过双亲委派模型保证了类的唯一性和安全性,同时提供了灵活性,允许用户自定义加载策略以满足特定需求。理解并掌握Classloader的...

    Java SE: ClassLoader in depth

    对于标题“Java SE: ClassLoader in depth”和描述中提到的“源码”、“工具”,实际上在给出的内容部分并没有任何与Java ClassLoader...深入理解ClassLoader机制对于开发大型、复杂或动态可扩展的Java应用非常重要。

    ClassLoader类加载机制和原理详解

    本文将深入探讨ClassLoader的工作原理和类加载机制,帮助开发者理解这个至关重要的概念。 1. 类加载机制概述 Java的类加载机制遵循“双亲委派模型”(Delegation Model)。当一个类被加载时,它首先会尝试由当前...

    金蝶Apusic应用服务器V6参考b手册b.doc

    金蝶Apusic应用服务器V6参考手册中的Classloader机制 Classloader是Java虚拟机(JVM)中的一种机制,用于加载和管理Java类。金蝶Apusic应用服务器V6参考手册中对Classloader机制进行了详细的介绍,包括Classloader...

    JAVA 基础培训,JDK和JVM,核心类的介绍和使用

    #### 一、JDK的classloader机制详解 在JAVA的基础培训中,深入理解JDK(Java Development Kit)和JVM(Java Virtual Machine)是至关重要的,尤其是关于JDK中的classloader机制。这一机制负责将Java类文件加载到JVM...

    JAVA工程师实习一周总结.docx

    总的来说,作为Java工程师,熟悉JVM的工作原理和ClassLoader机制是基础,而能够灵活运用这些知识解决实际问题则是进阶的标志。在实习的过程中,不断学习、实践和反思,将有助于快速成长为一名合格的Java开发人员。

    JAVA工程师实习一周总结【推荐下载】.doc

    ClassLoader机制是Java平台的一大特色,它负责动态加载类到JVM中。Java程序在运行时,不是一次性加载所有类,而是按需加载。ClassLoader分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader...

Global site tag (gtag.js) - Google Analytics