`

classLoader——双亲委派模型

 
阅读更多

JVM预定义的三种类型类加载器:

启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

标准扩展(Extension)类加载器:是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将< Java_Runtime_Home >/lib/ext或者由系统变量 java.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。

系统(System)类加载器:是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。

 

双亲委派机制描:

某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。



 从JDK1.2开始,java虚拟机规范推荐开发者使用双亲委派模式(ParentsDelegation Model)进行类加载,其加载过程如下:

(1).如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器去完成。

(2).每一层的类加载器都把类加载请求委派给父类加载器,直到所有的类加载请求都应该传递给顶层的启动类加载器。

(3).如果顶层的启动类加载器无法完成加载请求,子类加载器尝试去加载,如果连最初发起类加载请求的类加载器也无法完成加载请求时,将会抛出ClassNotFoundException,而不再调用其子类加载器去进行类加载。

双亲委派 模式的类加载机制的优点是java类它的类加载器一起具备了一种带优先级的层次关系,越是基础的类,越是被上层的类加载器进行加载,保证了java程序的稳定运行。

 

类的加载过程:

遇到一个新的类时,首先会到方法区去找class文件,如果没有找到就会去硬盘中找class文件,找到后会返回,将class文件加载到方法区中,在类加载的时候,静态成员变量会被分配到方法区的静态区域,非静态成员变量分配到非静态区域,然后开始给静态成员变量初始化,赋默认值,赋完默认值后,会根据静态成员变量书写的位置赋显示值,然后执行静态代码。当所有的静态代码执行完,类加载才算完成。

  • 大小: 218.3 KB
分享到:
评论

相关推荐

    Java ClassLoader Tutorial.zip

    3. 双亲委派模型:Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它首先会委托父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。 二、ClassLoader ...

    JVM.zip_JVM代理_classloader

    Java的类加载器采用双亲委派模型,即每个类加载器在尝试加载类时,会首先委托其父类加载器去尝试,只有当父类加载器无法找到对应的类时,当前类加载器才会尝试加载。 自定义类加载器允许开发者扩展这个过程,例如...

    系统稳定性——NoSuchMethodError常见原因及解决方法1

    JVM使用双亲委派模型加载类,启动类加载器(Bootstrap ClassLoader)最先加载核心类库,然后是扩展类加载器(Extension ClassLoader),最后是应用类加载器(Application ClassLoader)。如果同一个类在多个Jar包中...

    U计划——Java部分选择题

    类的加载遵循双亲委派模型,即从顶层的Bootstrap ClassLoader开始,向下加载到应用程序的自定义ClassLoader。这个过程确保了类的唯一性和安全性。 【Java语言特性】 Java语言诞生于1995年,具有面向对象、简单性、...

    深入java虚拟机——applet 演示

    Java的类装载机制具有双亲委派模型,即从顶层的Bootstrap ClassLoader开始,向下逐级查找,直到找到类为止,提高了类加载的安全性。 4. 运行时数据区 JVM内存分为堆、栈、方法区、本地方法栈和程序计数器五大部分...

    Java类加载原理解析文档

    Java类加载机制是Java技术...双亲委派模型是这一机制的核心,它使得系统类库优先于用户自定义类加载,避免了类的冲突。理解这些概念对于解决运行时类找不到等问题至关重要,并且有助于深入理解Java虚拟机的工作原理。

    java装载工具及方法指导

    Java的类加载机制遵循“双亲委派模型”,这意味着当一个类加载器接收到加载类的请求时,它会先委托给父类加载器尝试加载,只有当父类加载器无法加载时,才会尝试自己加载。这种机制保证了Java核心库的稳定性和安全性...

    JVM底层原理课件PPT

    双亲委派模型是JVM中类加载器之间的关系,每个类加载器都有一个父加载器,除了启动类加载器外,其他类加载器都有自己的父类加载器。当某个特定的类加载器接收到加载请求时,首先将加载任务委托给父类加载器,只有...

    面试题精华版,超详细

    **双亲委派模型的优点:** - **避免重复加载**:确保每个类只会被加载一次,即使多次请求同一个类,也只会加载一次。 - **安全性增强**:通过层次结构限制了类的加载来源,增强了系统的安全性。 #### Java反射技术 ...

    定位web开发中的jar包冲突

    默认情况下,Java使用双亲委派模型(Parent Delegation Model)加载类,即子类加载器先尝试加载,如果失败则委托给父类加载器,直至根加载器。这种机制旨在维护类加载的一致性,但也可能成为冲突的来源。 在描述的...

    JAVA高级工程师面试题

    - **重点**:掌握不同类加载器的作用范围和它们之间的关系,了解双亲委派模型如何确保类加载的一致性和安全性。 ### 总结 以上内容涵盖了JAVA高级工程师面试题中的核心知识点,包括但不限于应聘者的实际工作经验、...

    Java的四大核心技术

    - **双亲委派模型**:类装载器遵循一种称为“双亲委派模型”的原则,即子类装载器会先委托其父类装载器尝试加载类,只有当父类装载器无法加载时,子类装载器才会尝试自己加载。这种模型确保了系统的稳定性和安全性,...

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

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

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

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

    java基础之JVM

    双亲委派模型是指类加载器在加载类之前,先委托给父类加载器尝试加载,如果父类加载器加载失败,则由当前类加载器尝试加载。这一机制的优点是可以避免重复加载相同的类,同时保证了核心API类的安全性。 #### 三、...

    Java类加载原理解析

    Java 类加载的默认策略是双亲委派模型。这意味着,当一个类加载器收到加载类的请求时,它会首先尝试将任务委托给其父类加载器。只有当父类加载器无法找到或加载该类时,当前类加载器才会尝试自己加载。这样设计的...

    java经典面试题(典藏版)

    - 类加载机制:双亲委派模型。 - JVM内存结构:堆、栈、方法区、本地方法栈的优化策略。 - 类加载器(ClassLoader)的工作原理。 以上知识点涵盖了Java程序员面试的常规考察点,对于提升面试成功率至关重要。熟练...

    Java SE 8版虚拟机规范.pdf中文版 带标签 扫描版

    在Java SE 8中,类加载器按照双亲委派模型工作,从Bootstrap ClassLoader到Extension ClassLoader,再到App ClassLoader,最后是自定义的类加载器。这个机制确保了类的唯一性和安全性。 3. **字节码执行** JVM...

    2015-11-ClassLoaders-Selajev.pdf

    这种委托模型是双亲委派模型,它确保了Java平台的安全性和一致性。 在实际开发过程中,了解类加载机制是非常重要的。例如,在处理Java Web应用服务器时,通常会有多个应用同时运行,而它们可能需要加载相同类的不同...

Global site tag (gtag.js) - Google Analytics