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()方法自动构造的。

     

  • 相关阅读:
    HashMap源码解读(转)
    使用javascript开发2048
    程序猿接私活经验总结,来自csdn论坛语录
    Cocos2d-x实例:设置背景音乐与音效- AppDelegate实现
    Jenkins(二)
    SVN高速新手教程
    Visio Premium 2010密钥+破解激活方法
    oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
    shell语法简单介绍
    memset函数具体说明
  • 原文地址:https://www.cnblogs.com/i-hard-working/p/10393305.html
Copyright © 2011-2022 走看看