zoukankan      html  css  js  c++  java
  • 类加载器ClassLoader

    类加载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。

    类加载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。

    JVM在运行时会产生三个ClassLoader:根类加载器,ExtClassLoader和AppClassLoader。

    根类加载器不是ClassLoader的子类,它是用C++编写,因此我们在Java中看不到它。根类加载器负责加载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。

    ExtClassLoader负责加载JRE扩展目录ext中的jar包。

    AppClassLoader负责ClassPath路径下的类包。

    这三个加载器之间存在父子层级关系,即根类加载器是ExtClassLoader的父加载器,ExtClassLoader是AppClassLoader的父加载器。

    JVM加载类时使用“全盘负责委托机制”。

    ClassLoader是一个抽象类,位于java.lang包中:

    1. Class loadClass(String name):

    2. Class defineClass(String name, byte[] b, int off, int len):

    3. Class findSystemClass(String name):

    4. Class findLoadedClass(String name):

    5. ClassLoader getParent():

    类文件被加载并解析后,在JVM内将拥有一个对应的java.lang.Class类描述对象,该类的实例都拥有指向这个类描述对象的引用,而类描述对象又拥有指向关联ClassLoader的引用。

    每一个类在JVM中都拥有一个对应的java.lang.Class对象,它提供了类结构信息的描述。数组、枚举、注解以及基本Java类型甚至void都拥有对应的Class对象。

    Class对象是在加载类时由JVM通过调用类加载器中的defineClass()方法自动构造的。

     

  • 相关阅读:
    02.替换空格 (Java)
    01.二维数组中的查找 (Java)
    css
    CSS Selectors
    Golang Singleton
    TL;DR
    go get
    golang string、int、int64 float 互相转换
    Thrift支持的基本数据类型
    双亲委派模型
  • 原文地址:https://www.cnblogs.com/i-hard-working/p/10393305.html
Copyright © 2011-2022 走看看