• 类加载


    类加载器:负责加载编译后的class文件(字节码文件)到JVM当中。

    在JRE中,类加载器主要分为以下几种:

    1)引导类加载器(Bootstrap)

    它本身使用C语言实现的,负责加载Java的核心类库,在jrelib目录中,当中包括如rt.jar,这些都是Java自带的核心类库,必须由它来完成加载。

    2)扩展类加载器(Extention)
    这个加载器就是由Java语言实现,负责加载jrelibext目录下的类库,这个目录下的类库都是一些扩展类。

    3)系统类加载器(App)
    这个类加载器同样使用Java语言实现,它主要负责加载classpath下面的所有类库,通常我们编写的Java类都是由这个类加载器完成加载。

    双亲委托模型:

    三个类加载器的初始化过程,当程序运行时,首先会初始化引导类加载器,它就负责创建和初始化扩展类加载器,当扩展类加载器完成初始化之后,

    又负责创建和初始化系统类加载器,这些类加载器协同起来完成整个类加载的过程,因此这些类加载器的加载模式是基于“双亲委托模型”。

    举例说明:当我们编写一个Java类时,首先负责加载这个类的加载器是系统类加载器,但是它不会立马就去执行加载,而是先把这个任务交给父加载器(扩展类加载器),而扩展类加载器同样也会将这个任务交给父加载器(引导类加载器),最终当引导类加载器不能去加载这个类的时候(也就是在自己加载职责范围找不到的时候),又会将这个任务交回给子加载器。以此类推,最终我们编写的类都会配置在classpath环境中,所以,这个类的加载任务还是回到系统类加载器来完成。

    当一个class文件最终加载到jvm之后,就表示类加载这个阶段已经全部完成。接下来就是对整个class文件的内容进行解析和做内存的分配

  • 相关阅读:
    LintCode2016年8月22日算法比赛----骰子求和
    LintCode2016年8月22日算法比赛----平面列表
    LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值
    LintCode2016年8月22日算法比赛----克隆二叉树
    Leetcode算法比赛----Longest Absolute File Path
    Leetcode算法比赛----First Unique Character in a String
    vue运行报错Error: listen EADDRNOTAVAIL 192.168.1.105:8080
    vue使用lrz插件压缩图片
    <input type="file">原型难看
    vue创建全局变量以及全局方法
  • 原文地址:https://www.cnblogs.com/zhao109/p/6141553.html
Copyright © 2020-2023  润新知