展开

关键词

Android解析ClassLoader(一)Java中的ClassLoader

前言热修复和插件化是目前比较热门的技术,要想更好的掌握它们需要了解ClassLoader,因此也就有了本系列的产生,这一篇我们先来学习Java中的ClassLoader。 1.ClassLoader的类型在Java虚拟机(一)结构原理与运行时数据区域这篇文章中,我提到过类加载子系统,它的主要作用就是通过多种类加载器(ClassLoader)来查找和加载Class文件到 Java Java虚拟机的启动就是通过 Bootstrap ClassLoader创建一个初始类来完成的。 由于Bootstrap ClassLoader是使用CC++语言实现的, 所以该加载器不能被Java代码访问到。 2.ClassLoader的继承关系运行一个Java程序需要用到几种类型的类加载器呢?如下所示。?

51150

浅入Java ClassLoader

ClassLoader是做什么的?ClassLoader是用来加载Class 文件的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。 loadClass loadClass(String)链接参数类,链接参照上面,不再赘述void resolveClass(Class)loadClass()该方法是加载目标类的入口,它首先会查找当前 ClassLoader ClassLoader 的 findClass() 方法是需要子类来覆盖的,不同的加载器将使用不同的逻辑来获取目标类的字节码。 class ClassLoader { 加载入口,定义了双亲委派规则 Class loadClass(String name) { 是否已经加载了 Class t = this.findFromLoaded

14920
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年38元,还有多款热门云产品满足您的上云需求

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

    Java ClassLoader 透析

    ClassLoaderJava 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里。网上的文章也是一篇又一篇,经过本人的亲自鉴定,绝大部分内容都是在误导别人。 $ cd ~sourcejclv1$ javac Dep.java$ cd ~sourcejclv2$ javac Dep.java$ cd ~sourcejcl$ javac Test.java$ java 位于同一个 ClassLoader 里面的类名是唯一的,不同的 ClassLoader 可以持有同名的类。ClassLoader 是类名称的容器,是类的沙箱。? 转载自:https:mp.weixin.qq.comsHZEFKZXu_AUr4HqD7M2H0g----留言提问回答区1、jvm是在执行java helloworld的时候启动的吗? 不是的! 但当这个 ClassLoader 由外部类创建 ClassLoader 时直接指定一个 ClassLoader 为 parent 的话,那么它的类型由父加载器决定。

    23720

    ClassLoader解析(一):Java中的ClassLoader

    ClassLoader的类型Java中的类加载器主要有两种类型:系统类加载器和自定义类加载器。 Bootstrap ClassLoader启动类加载器,是Java类加载层次中最顶层的类加载器,是用CC++实现的,负责加载JDK中的核心类库,如 rt.jar、 resources.jar、 charsets.jar 可以通过启动JVM时指定 -Xbootclasspath来改变Bootstrap ClassLoader的加载目录。 扩展类加载器,负责加载Java的扩展类库,默认加载 Java_homejrelibext目录下的所有jar。 Custom ClassLoader除了系统提供的类加载器,还可以自定义类加载器,自定义类加载器是通过继承 java.lang.ClassLoader类的方式来实现自己的类加载器。

    28520

    JAVAClassLoader

    JAVA基础系列之ClassLoader一,Java类的加载、链接与初始化1,加载:查找并加载类的二进制数据• 通过一个类的全限定名来获取定义此类的二进制字节流• 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 把类中的符号引用转化为直接引用3,初始化为类的静态变量赋予正确的初始值二,JVM加载类的主要方式从本地系统中直接加载通过网络下载.class文件从zip,jar等归档文件中加载.class文件从专有数据库中提取.class文件讲Java 扩展类加载器是纯Java类,是java.lang.ClassLoader类的子类。3,系统类加载器也称为应用类加载器,它的父加载器为扩展类加载器。 系统类加载器是纯Java类,是java.lang.ClassLoader类的子类。除了以上虚拟机自带的加载器,用户也可以继承java.lang.ClassLoader类实现自定义加载器。 考虑到安全因素,我们试想一下,如果不使用这种委托模式,那我们就可以随时使用自定义的String来动态替代java核心api中定义的类型,这样会存在非常大的安全隐患,而双亲委托的方式,就可以避免这种情况,

    29590

    今天来聊Java ClassLoader

    什么是类加载机制众所周知我们编写的 Java 文件都是以.java 为后缀的文件,编译器会将我们编写的.java 的文件编译成.class 文件,简单来说类加载机制就是从文件系统将一系列的 class Java 中大概有四种类加载器,分别是:启动类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoader),系统类加载器(System ClassLoader ),自定义类加载器(Custom ClassLoader),依次属于继承关系(注意这里的继承不是 Java 类里面的 extends。? ,所有的java. *开头的类均被Bootstrap ClassLoader加载),启动类加载器是无法被Java程序直接引用的。

    20420

    JavaclassLoader浅析.

    本文为在公司内部TD上写的一篇小文, 主要讲解javaclassLoader基础知识, 现在拿来这里分享一下.  二、ClassLoader的作用我们都知道java程序写好以后是以.java(文本文件)的文件存在磁盘上,然后,我们通过(binjavac.exe)编译命令把.java文件编译成.class文件(字节码文件 三、ClassLoader层次结构请执行如下程序: 1 public class Test { 2 public static void main(String[] args) { 3 ClassLoader classLoader = Test.class.getClassLoader(); 4 System.out.println(classLoader); 5 6 ClassLoader classLoader1 所以回到我们最开始那个问题,没有main方法是因为执行的根本不是我们自己写的类,执行的是java核心中的那个Long类,当然没有main方法了。 这样就防止我们应用中写的类覆盖掉java核心类。

    778100

    Java ClassLoader加载class过程

    order to find the class. c = findClass(name); } } if (resolve) { resolveClass(c); } return c; } 以上是ClassLoader String name = BoyCry; String basePath = C:UsersMyCode; Path p1 = Paths.get(basePath,1,BoyCry1.zip); ClassLoader return(Unsafe) field.get(null); } public static void main(String[] args) throws ClassNotFoundException{ ClassLoader strncmp((const char*)parsed_name->bytes(), pkg, strlen(pkg))) { It is illegal to define classes in the java

    36540

    深入分析Java ClassLoader原理

    而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后 二、Java默认提供的三个ClassLoaderBootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库,如:rt.jar、resources.jar 注意: 除了Java默认提供的三个ClassLoader之外,用户还可以根据需要定义自已的ClassLoader,而这些自定义的ClassLoader都必须继承自java.lang.ClassLoader 类,也包括Java提供的另外二个ClassLoader(Extension ClassLoader和App ClassLoader)在内,但是Bootstrap ClassLoader不继承自ClassLoader ,因为它不是一个普通的Java类,底层由C++编写,已嵌入到了JVM内核当中,当JVM启动后,Bootstrap ClassLoader也随着启动,负责加载完核心类库后,并构造Extension ClassLoader

    40020

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

    我们都知道,Java类都是靠ClassLoader来加载的,而类加载器也是java类,因而java类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这个加载器正是BootstrapClassLoader 我们还知道,JAVA虚拟机的ClassLoader采用“双亲委派”机制,如下图所示:图中BootstrapClassLoader、ExtClassLoader 和 AppClassLoader是JVM中内置了三个重要的 此外,参考博客老大难的 Java ClassLoader,到了该彻底理解它的时候了中还有如下一段描述:图中的 ExtensionClassLoader 的 parent 指针画了虚线,这是因为它的 parent 参考博客:1、http:blog.itpub.net31561269viewspace-2222522 老大难的 Java ClassLoader,到了该彻底理解它的时候了2、https:www.jianshu.comp2000f9d805ef  Java类的加载和初始化3、https:blog.csdn.netdaochuwenziyaoarticledetails77689154 类加载器简述4、https:www.ibm.comdeveloperworkscnjavaj-lo-classloader

    5930

    面试必备——关于Java ClassLoader你真的了解吗

    什么是类加载机制----众所周知我们编写的 Java 文件都是以.java 为后缀的文件,编译器会将我们编写的.java 的文件编译成.class 文件,简单来说类加载机制就是从文件系统将一系列的 class Java 中大概有四种类加载器,分别是:启动类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoader),系统类加载器(System ClassLoader ),自定义类加载器(Custom ClassLoader),依次属于继承关系(注意这里的继承不是 Java 类里面的 extends)启动类加载器(Bootstrap ClassLoader):主要负责加载存放在 *开头的类均被Bootstrap ClassLoader加载),启动类加载器是无法被Java程序直接引用的。 这种机制很好的保证了 Java API 的安全性,使得 JDK 的代码不会被篡改。

    22500

    面试必备——关于Java ClassLoader你真的了解吗

    什么是类加载机制----众所周知我们编写的 Java 文件都是以.java 为后缀的文件,编译器会将我们编写的.java 的文件编译成.class 文件,简单来说类加载机制就是从文件系统将一系列的 class Java 中大概有四种类加载器,分别是:启动类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoader),系统类加载器(System ClassLoader ),自定义类加载器(Custom ClassLoader),依次属于继承关系(注意这里的继承不是 Java 类里面的 extends)启动类加载器(Bootstrap ClassLoader):主要负责加载存放在 *开头的类均被Bootstrap ClassLoader加载),启动类加载器是无法被Java程序直接引用的。 这种机制很好的保证了 Java API 的安全性,使得 JDK 的代码不会被篡改。

    15220

    老大难的 Java ClassLoader 再不理解就老了

    ----ClassLoaderJava 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里。 ClassLoader 传递性程序在运行过程中,遇到了一个未知的类,它会选择哪个 ClassLoader 来加载它呢? ClassLoader 构造器protected ClassLoader(String name, ClassLoader parent);双亲委派规则可能会变成三亲委派,四亲委派,取决于你使用的父加载器是谁 $ cd ~sourcejclv1$ javac Dep.java$ cd ~sourcejclv2$ javac Dep.java$ cd ~sourcejcl$ javac Test.java$ java 位于同一个 ClassLoader 里面的类名是唯一的,不同的 ClassLoader 可以持有同名的类。ClassLoader 是类名称的容器,是类的沙箱。?

    41320

    猫头鹰的深夜翻译:理解javaclassloader

    前言Java ClassLoaderjava运行系统中一个至关重要但是经常被忽略的组件。它负责在运行时寻找并加载类文件。创建自定义的ClassLoader可以彻底重定义如何将类文件加载至系统。 这个教程对JavaClassLoader进行总体概述,并给了一个自定义ClassLoader的例子。这个ClassLoader会在加载代码之前自动编译。 你将会了解ClassLoader是做什么的,以及如何创建自定义ClassLoader。本教程需要阅读者对Java编程有基础了解,包括创建,编译和执行简单的命令行Java程序。 ClassLoader是JVM的一部分,它将类加载到内存中。此外,Java ClassLoader是用Java编写的。这意味着可以轻松的创建自己的ClassLoader,无需了解JVM更多的细节。 Java语言支持自定义ClassLoader的功能使这一想法成为可能。

    25040

    老大难的 Java ClassLoader,到了该彻底理解它的时候了

    ClassLoaderJava 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里。网上的文章也是一篇又一篇,经过本人的亲自鉴定,绝大部分内容都是在误导别人。 本文我带读者彻底吃透 ClassLoader,以后其它的相关文章你们可以不必再细看了。ClassLoader 做什么的?顾名思义,它是用来加载 Class 的。 $ cd ~sourcejclv1$ javac Dep.java$ cd ~sourcejclv2$ javac Dep.java$ cd ~sourcejcl$ javac Test.java$ java 位于同一个 ClassLoader 里面的类名是唯一的,不同的 ClassLoader 可以持有同名的类。ClassLoader 是类名称的容器,是类的沙箱。 ? 除此之外,parent 还表达了一种共享关系,当多个子 ClassLoader 共享同一个 parent 时,那么这个 parent 里面包含的类可以认为是所有子 ClassLoader 共享的。

    40930

    一看你就懂,超详细java中的ClassLoader详解

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。 备注:本文篇幅比较长,但内容简单,大家不要恐慌,安静地耐心翻阅就是Class文件的认识我们都知道在Java中程序是运行在虚拟机中,我们平常用文本编辑器或者是IDE编写的程序都是.java格式的文件,这是最基础的源码 接下来我们探讨它们的加载顺序,我们先用Eclipse建立一个java工程。 ? 然后创建一个Test.java文件。 Bootstrap ClassLoader是由CC++编写的,它本身是虚拟机的一部分,所以它并不是一个JAVA类,也就是无法在java代码中获取它的引用,JVM启动时通过Bootstrap类加载器加载rt.jar 然后我们还要编写另外一个ClassLoader,DiskClassLoader1.java这个ClassLoader的代码和DiskClassLoader.java代码一致,我们要在DiskClassLoader1

    2K31

    ClassLoader 类加载器

    *Java中的ClassLoader*1.系统类加载器包括3种:  1)Bootstrap ClassLoader(引导类加载器)  CC++代码实现的加载器,用于加载指定的JDK的核心类库,比如java.lang Java虚拟机的启动就是通过Bootstrap ClassLoader创建一个初始类来完成的。   2)Extensions ClassLoader(拓展类加载器)  Java中的实现类为ExtClassLoader,提供了除了系统类之外的额外功能  3)Application ClassLoader (应用程序类加载器)  Java中的实现类为AppClassLoader2.Custom ClassLoader(自定义类加载器)通过继承java.lang.ClassLoader类的方式来实现自己的类加载器 *Java和Android的ClassLoader的区别*1.Java的引导类加载器是由C++编写的,Android中的引导类加载器则是由Java编写的2.Android的继承关系要比Java继承关系复杂一些

    38540

    JVM自定义类加载器

    :顶层类加载器,负责加载Java基础类,主要是 {JRE_HOME}lib 下面的 rt.jar,resources.jar,charset.jar和class等。 Extension ClassLoader:第二层加载器,负责加载Java扩展类,主要是 {JRE_HOME}libext 下面的jar和classApplication ClassLoader:负责加载当前 Java应用的classpath中的所有类其中Bootstrap ClassLoader是JVM级别的,由C++编写。 Extension ClassLoader、Application ClassLoader都是Java类。 由于一些特殊的需求:如①加密:Java代码很容易被反编译,如果想对自己的代码进行加密。可先将编译后的代码进行加密,然后再由自定义ClassLoader先解密,然后再加载类。

    13020

    JAVA CLASS LOADER

    ClassLoader 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。 Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。 定制ClassLoader Java自带的ClassLoader类的定义为: Java代码 ? public abstract class ClassLoader{ } 启动类加载器是JVM通过调用ClassLoader.loadClass()方法。 Java代码 ? 两个异常(exception) NoClassDefFoundError: 当java源文件已编译成.class文件,但是ClassLoader在运行期间搜寻路径load某个类时,没有找到.class文件则抛出这个异常

    11520

    (87) 类加载机制 计算机程序的思维逻辑

    上节,我们探讨了动态代理,在前几节中,我们多次提到了类加载器ClassLoader,本节就来详细讨论Java中的类加载机制与ClassLoaderClassLoader一般是系统提供的,不需要自己实现,不过,通过创建自定义的ClassLoader,可以实现一些强大灵活的功能,比如:热部署,在不重启Java程序的情况下,动态替换类的实现,比如Java 下面,我们首先来进一步理解Java加载类的过程,理解类ClassLoader和Class.forName,介绍一个简单的应用,然后我们探讨如何实现自定义ClassLoader,演示如何利用它实现热部署。 类加载器不是只有一个,一般程序运行时,都会有三个:启动类加载器(Bootstrap ClassLoader):这个加载器是Java虚拟机实现的一部分,不是Java语言实现的,一般是C++实现的,它负责加载 小结本节探讨了Java中的类加载机制,包括Java加载类的基本过程,类ClassLoader的用法,以及如何创建自定义的ClassLoader,探讨了两个简单应用示例,一个通过动态加载实现可配置的策略,

    30080

    相关产品

    • 消息队列 TDMQ

      消息队列 TDMQ

      消息队列 TDMQ 是基于 Apache 顶级开源项目Pulsar自研的金融级分布式消息中间件,是一款具备跨城高一致、高可靠、高并发的分布式消息队列,拥有原生Java 、 C++、Python、GO 多种API, 支持 HTTP 协议方式接入,可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券