对类加载器(ClassLoader)的理解

类加载器(ClassLoader)

  当编辑器编译java源文件后,会产生以个相对一的字节码文件(.class)

  当程序执行开始之前,必须将这个文件载入内存中,生成一个与之匹配的Class对象,

  任何以个类加载之后jvm都会为其创建以个唯一的class对象(元对象),再后续都是通过这个Class对象来创建实例,后话(Class对象就是放射的基石。)

  这个过程我们称之为类加载

  要弄清楚类加载的机制,授信我们必须要清楚了解类加载的相关知识,它是完成整个类加载的重要工具。

  简单的说,当有个Class文件载入内存之后,并构建成一个Class对象的过程,就称之为类加载

类加载器(三类)

1,启动类加载器(BootStrap ClassLoader)

  启动类加载器是负责加载jdk核心包下的类文件,对应的目录就是“JDK安装目录/jre/lib”。其中最重要的以个jar文件就是rt.jar

  注意:这个类加载器我们是没有办法区操作的,因为它本身是用c++语言实现的

2,扩展类加载器(Extension ClassLoader)

  这个类加载器,是由启动类加载器来加载的,扩展类加载器是用java语言实现,它主要负责加

  载jdk里面的扩展jar文件,对应 目录是"/JDK安装目录/jre/lib/ext"

3,应用程序类加载器(Application ClassLoader)

  这个类加载器也是使用java语言实现,它同样由引导类加载器加载。它主要负责加载我们开发人员说明编写的java类,通常对应的目录就是环境变量下的ClassPath路径

双亲委托模型

  jvm的类加载时基于双亲委托模型,也就是当我们编写一个任意类的时候,本身不是由应用程序加载器立即加载,而是先委托给夫加载器,当夫加载器再自己说明加载的范围内找不到相对应的class文件时,最后才会将加载权交回给子加载器区加载,这样做的目的是为了保证jvm的安全机制

双亲委托模型的工作流程:

  如果以个类加载器收到类加载的请求,它首先不会自己先尝试加载这个类,而是把请求委托给父类加载器去完成,依次向上,因此,所有的类加载器请求最终都应该被传递到顶层的启动类的加载器中,只有当父加载器在它的搜索范围中没有找到所需要的类时,即无法完成该加载,子加载器才会尝试自己去加载类

时间: 2024-10-29 00:51:00

对类加载器(ClassLoader)的理解的相关文章

类加载器ClassLoader的理解

最近在做一个热加载Class的小组件,这个组件需要对类加载器ClassLoader有所了解,我就顺便借这个机会把学到的一点皮毛与大家分享一下. 从Class文件开始 ClassLoader,顾名思义就是类加载器.简单的说就是把Class文件加载到JVM中,之后程序就能正常的运行了. 我们平时写的代码都是.java格式的文件,但是这个文件是不能够直接运行的.比如下面这个简单的测试程序Test.java 1 public class Test { 2 3 public static void mai

深入理解 java类加载器ClassLoader

类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件).类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例.每个这样的实例用来表示一个 Java 类.通过此实例的 newInstance()方法就可以创建出该类的一个对象,也就是万能的Class对象. Jav

java的类加载器ClassLoader

类在执行之前会执行三个步骤:加载 ->   连接  -> 初始化 1.java中类的加载 java 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个Class对象,用来封装类在方法区的数据结构.可以把堆区的Class理解为方法区的一面镜子,对应方法区的类的数据结构,通过这面镜子实现类的调用. 加载.class文件的多种方式: 1.从本地系统中直接加载 2.通过网络下载.class文件 3.从zip,jar里加载.class文件

Java类加载器( CLassLoader ) 死磕 3: 揭秘 ClassLoader抽象基类

[正文]Java类加载器(  CLassLoader ) 死磕3:  揭秘 ClassLoader抽象基类 3.1. 揭秘ClassLoader抽象基类 3.1.1. 类的加载分类:隐式加载和显示加载 java中类是动态加载的,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载.一是加快启动的速度,二是节约内存.如果一次性加载全部jar包的所有class,速度会很慢. 动态载入一个class类,有两种方式: (1) implicit隐式加载 即通过实例化才载入的特性来

java类加载器——ClassLoader

Java的设计初衷是主要面向嵌入式领域,对于自定义的一些类,考虑使用依需求加载原则,即在程序使用到时才加载类,节省内存消耗,这时即可通过类加载器来动态加载. 如果你平时只是做web开发,那应该很少会跟类加载器打交道,但如果你想深入学习tomcat服务器的架构,它是必不可少的.所谓类加载器,就是用于加载Java类到Java虚拟机中,它负责读取Java字节码,并转换成java.lang.Class类的一个实例,使字节代码.class文件得以运行.一般类加载器负责根据一个指定的类找到对应的字节代码,然

浅析java类加载器ClassLoader

作为一枚java猿,了解类加载器是有必要的,无论是针对面试还是自我学习. 本文从JDK提供的ClassLoader.委托模型以及如何编写自定义的ClassLoader三方面对ClassLoader做一个简要的总结. JDK中提供的ClassLoader 1. Bootstrap ClassLoader Bootstrap加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib以及%JAVA_HOME%/jre/classes中的类,是最顶

JAVA之了解类加载器Classloader

1.类的加载.连接和初始化   类初始化通常包括加载.连接.初始化三个步骤. (1)进程的结束 每当运行一个java程序时,将会启动一个java虚拟机进程,不管程序多么复杂,有多少线程,都在这个java虚拟机进程里.以下四种情况会使得该进程被终止-- 程序运行到最后正常结束: 程序里遭遇了System.exit(),或者是Runtime.getRunTime().exit()代码: 程序执行中遇到了未捕获的异常或者错误: java所在平台强制结束了JVM进程: 当该进程结束,那么该进程在内存中的

【正文】Java类加载器( CLassLoader ) 死磕 4: 神秘的双亲委托机制

[正文]Java类加载器(  CLassLoader ) 死磕4:  神秘的双亲委托机制 本小节目录 4.1. 每个类加载器都有一个parent父加载器 4.2. 类加载器之间的层次关系 4.3. 类的加载次序 4.4 双亲委托机制原理与沙箱机制 4.5. forName方法和loadClass方法的关系 4.6. 使用组合而不用继承 4.7. 各种不同的类加载途径 4.1.每个类加载器都有一个parent父加载器 每个类加载器都有一个parent父加载器,比如加载SystemConfig.cl

jvm之java类加载机制和类加载器(ClassLoader)的详解

当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化. 一.类加载过程 1.加载 加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象. 类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础

Java类加载器ClassLoader总结

JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中. 2.显式装载, 通过class.forname()等方法,显式加载需要的类 类加载的动态性体现: 一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是