首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVAClassLoader

JAVA基础系列之ClassLoader 一,Java类的加载、链接与初始化 1,加载:查找并加载类的二进制数据 • 通过一个类的全限定名来获取定义此类的二进制字节流 • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构...ClassLoader总共分为以下四种: 1,根(Bootstrap)类加载器 该类加载器没有父加载器,他负责加载虚拟机的核心类库,如java.lang.*等。...跟类加载器的实现依赖于底层操作系统属于虚拟机实现的一部分,它并没有继承java.lang.ClassLoader类。 2,扩展(Extension)类加载器 它的父类加载器为根类加载器。...扩展类加载器是纯Java类,是java.lang.ClassLoader类的子类。 3,系统类加载器 也称为应用类加载器,它的父加载器为扩展类加载器。...系统类加载器是纯Java类,是java.lang.ClassLoader类的子类。 除了以上虚拟机自带的加载器,用户也可以继承java.lang.ClassLoader类实现自定义加载器。

57890
您找到你想要的搜索结果了吗?
是的
没有找到

Java ClassLoader 透析

ClassLoaderJava 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里。网上的文章也是一篇又一篇,经过本人的亲自鉴定,绝大部分内容都是在误导别人。...BootstrapClassLoader 负责加载 JVM 运行时核心类,这些类位于 JAVA_HOME/lib/rt.jar 文件中,我们常用内置库 java.xxx.* 都在里面,比如 java.util...、java.io.、java.nio.、java.lang. 等等。这个 ClassLoader 比较特殊,它是由 C 代码实现的,我们将它称之为「根加载器」。...class Driver { static { try { java.sql.DriverManager.registerDriver(new Driver()); }...$ cd ~/source/jcl/v2 $ javac Dep.java $ cd ~/source/jcl $ javac Test.java $ java Test v1 v2 false 在这个例子中如果两个

47620

浅入Java ClassLoader

2.2.1 BootstrapClassLoader 负责加载 JVM 运行时核心类,这些类位于 $JAVA_HOME/lib/rt.jar 文件中,我们常用内置库 java.xxx.* 都在里面,比如...java.util....、java.io.、java.nio.、java.lang. 等等。这个 ClassLoader 比较特殊,它是由 C 代码实现的,我们将它称之为「根加载器」。...2.2.2 ExtensionClassLoader 负责加载 JVM 扩展类,比如 swing 系列、内置的 js 引擎、xml 解析器 等等,这些库名通常以 javax 开头,它们的 jar 包位于 $JAVA_HOME...而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终请求都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有所需的类)时,子加载器才会自己尝试加载.Java

31720

今天来聊Java ClassLoader

Java 中大概有四种类加载器,分别是:启动类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoader),系统类加载器(System ClassLoader...),自定义类加载器(Custom ClassLoader),依次属于继承关系(注意这里的继承不是 Java 类里面的 extends。...3.启动类加载器(Bootstrap ClassLoader):主要负责加载存放在Java_Home/jre/lib下,或被-Xbootclasspath参数指定的路径下的,并且能被虚拟机识别的类库(如...*开头的类均被Bootstrap ClassLoader加载),启动类加载器是无法被Java程序直接引用的。...4.扩展类加载器(Extension ClassLoader):主要负责加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载Java_Home/jre/lib/ext

43620

深入分析Java ClassLoader原理

二、Java默认提供的三个ClassLoader BootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库,如:rt.jar、resources.jar..._22\jre\classes Extension ClassLoader:称为扩展类加载器,负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar。...注意: 除了Java默认提供的三个ClassLoader之外,用户还可以根据需要定义自已的ClassLoader,而这些自定义的ClassLoader都必须继承自java.lang.ClassLoader...类,也包括Java提供的另外二个ClassLoader(Extension ClassLoader和App ClassLoader)在内,但是Bootstrap ClassLoader不继承自ClassLoader...第三行结果说明:ExtClassLoader的类加器是Bootstrap ClassLoader,因为Bootstrap ClassLoader不是一个普通的Java类,所以ExtClassLoader

65120

JAVA ClassLoader双亲委派机制细节研究

我们都知道,Java类都是靠ClassLoader来加载的,而类加载器也是java类,因而java类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这个加载器正是BootstrapClassLoader...我们还知道,JAVA虚拟机的ClassLoader采用“双亲委派”机制,如下图所示: 图中BootstrapClassLoader、ExtClassLoader 和 AppClassLoader是JVM...*、java.io.*、java.nio.*、java.lang.* 等等。这个 ClassLoader 比较特殊,它是由 C 代码实现的,我们将它称之为“根加载器”。...直到我看了ClassLoader.java这个类的源码: public abstract class ClassLoader { protected Class<?...77689154 类加载器简述 4、https://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 深入探讨 Java 类加载器 5、https

30830

Java类加载原理与ClassLoader使用总结

前言 说来好笑,不知道怎么我就来搞Java了。...虽说大学也码了三年多的代码,但是七七八八乱糟糟的东西搞得有点多,对Java的理解也只能算是hello world,这让我感觉非常慌,尤其是看到招聘网上的一堆JD都要求深入理解JVM,再对比下自己真是自惭形秽...双亲委派模型 类加载这个概念应该算是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制字节流“的目的。实现这个功能的代码模块就是类加载器。...接着我们新建一个测试类com.mythsman.test.Main,在主函数里创建两个自定义的ClassLoaderClassLoader classLoader1=new ClassLoader...再修改下主函数: package com.mythsman.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths

24440

ClassLoader解析(二):Android中的ClassLoader

概述 不管是Java虚拟机,还是Android中的Dalvik/ART虚拟机,都是使用ClassLoader来将Class加载到内存。...只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源文件生成的.class文件,而Android是把所有Class文件进行合并,优化,...本文分析涉及的源码为Android API 28 Android中ClassLoader的类型 Java中的ClassLoader可以加载jar文件和class文件,这一点在Android中不适用,因为...BootClassLoader Android系统启动时会使用BootClassLoader来预加载常用类,与Java中的BootClassLoader不同,它并不是由C/C++代码实现,而是由Java...BootClassLoader是ClassLoader的内部类,并继承自ClassLoader

1.4K40

ClassLoader解惑

一、什么是Classloader 一个Java程序要想运行起来,首先需要经过编译生成 .class文件,然后创建一个运行环境(jvm)来加载字节码文件到内存运行,而.class 文件是怎样被加载中jvm...中的就是Java Classloader所做的事情。...另外理解 cl只能加载jar里面的文件夹里面的class文件,不能加载jar里面嵌套的jar里面的class,这个很重要 二、Java自带的Classloader 2.1 BootstrapClassloader...选项或使用- D选项指定sun.boot.class.path系统属性值可以指定附加的类,它不是 java.lang.ClassLoader的子类,而是由JVM自身实现的该类c 语言实现,Java程序访问不到该加载器...2.6 Java中如何构造三种类加载器的结构 下面从源码来分析下JVM是如何构建内置classloader的,具体是rt.jar包里面sun.misc.Launcher类: public Launcher

1.4K10

JDK源码解析之 java.lang.ClassLoader

Bootstrap ClassLoader负责加载核心类库(jdk lib下的类),用C++实现,java代码中显示为null;Extension ClassLoader负责加载lib/ext下的类;App...其中Bootstrap ClassLoader是Extention ClassLoader的父加载器,Extention ClassLoader是APP ClassLoader的父加载器,但不是父子类关系...: 启动类加载器, 加载JAVA_HOME/lib/目录下的所有jar包, 而该目录下的主要放系统核心类库,比如包含Object, String等类的rt.jar就是由该类加载器加载进内存的. 1.2...、ExtClassloader: 扩展类加载器, 加载JAVA_HOME/jre/lib/ext/目录下的所有jar包或者由java.ext.dirs系统属性指定的jar包。...BootStrapClassLoader并不是用java写的,而是用C++,他属于JVM的一部分,在JVM启动时就会被连带启动起来,所以在不需要被某一个ClassLoader加载。

30430

深入理解Java类加载器(ClassLoader)

”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,...双亲委派模式优势 采用双亲委派模式的是好处是Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次...其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API...从图可以看出顶层的类加载器是ClassLoader类,它是一个抽象类,其后所有的类加载器都继承自ClassLoader(不包括启动类加载器),这里我们主要介绍ClassLoader中几个比较重要的方法。...加载这个类的ClassLoader(指ClassLoader实例对象)必须相同。

1.4K10
领券