• Class字节码的加载


    提到Class的加载,就不得不提到ClassLoader,因为java加载类就是靠它加载的,它负责读取字节码的字节流进行加载。

    ClassLoader的继承关系是从BootStrapClassLoader开始的,也是由它最先加载类,然后是ExtClassLoader,接下来是AppClassLoder(应用程序默认的),

    最后是用户自己的ClassLoader(通常在容器下编写代码,都是由容器自定义创建的ClassLoader创建的类)。下面简单介绍一下他们的用途。

    1、BootStrapClassLoader

    BootStrapClassLoder主要用于加载一些java自带的核心类(例如java.lang.*),通常这些核心类的Class被签名,不能被替换掉,它是由JVM内核实现的,

    在Hotspot VM中用C++实现的,有了它加载最核心的内容,才会有后面的ClassLoader的存在。

    2、ExtClassLoader

    ExtClassLoader是加载在jre/lib/ext/目录下的jar包,用户也可以自己将jar包放到这个目录下,通过这个ClassLoader来加载。

    3、AppClassLoader

    AppClassLoader也是用户可见的ClassLoader,它加载的是classpath下面的内容,也就是和classpath相关的类,在默认情况下都由它来加载。

    4、自定义的ClassLoader

    用户自定义的ClassLoader要加载的内容可能不在系统的classpath范围内(也可以在这个范围内),甚至不是Class文件或jar文件,

    也就是加载方式可以完全由自己来定义。

  • 相关阅读:
    线程池类型场景和问题
    react Antdesign Select添加全选功能
    API与ESB 、ServiceMesh、微服务究竟关系如何?
    RabbitMQ四种Exchange类型
    RabbitMq安装
    kafka 部署
    共享文件夹重启后每次都要输入密码
    algorithm 12 partial_sort_copy
    algorithm 11 nth_element
    algorithm 11 none_of
  • 原文地址:https://www.cnblogs.com/wangpin/p/8080508.html
Copyright © 2020-2023  润新知