• Java虚拟机原理图解之类加载器机制和类加载过程


    1,Java语言跨平台是因为可以在大部分的操作平台中运行,因为它的运行环境是在Java虚拟机中的。Java虚拟机对各个平台来说就是各个平台的一个可执行程序

     2,具体运行步骤

      2.1根据jvm内存配置要求,为jvm申请特定大小的内存空间

       2.2创建一个引导类加载器实例,初步加载系统类到内存方法区域

       2.3创建JVM启动器实例Launcher(单例模式),并且获得类加载器ClassLoader。launcher内部有两个类加载器,

    双亲委派模型:子类加载器只能判断某个类是否被引导类加载器加载过,不能委托它加载某个类

       a,委托父类加载器帮忙加载

      b,父类加载器加载不了,查询引导类加载器有没有加载过

      c,没有加载过,当前类加载器自己加载该类

      d,加载成功返回对应的对象,加载失败,抛出异常,类找不到

     4,使用类加载器加载主类,首先查看主类的定义,根据主类定义,先去将主类内部声明的类成功加载到内存中,最后才加载主类

    5,使用Main类的main方法作为程序入口的运行程序

    6,方法执行完毕,jvm销毁,释放内存 

    三,类加载器

      指的是可以加载类的工具。JVM自身定义了三个类加载器:

      引导类加载器(Bootstrap Class Loader)、

        使用C++语言实现的,不可以被Java代码访问到,我们可以插叙某个类是否被其加载过

      拓展类加载器(Extension Class Loader )、

        是整个jvm加载器的Java代码可以访问到的类加载器的最顶端,是超级父加载器,它没有父类加载器

      应用加载器(Application Class Loader)

        加载用户代码,

    四,双亲委派模型的逻辑和底层代码

    jdk自身默认的加载类的行为,我们可以通过继承复写该方法来改变行为

     五,类加载器和Class对象的关系

     6,线程上下文加载器

     可以为当前的线程指定类加载器,这样就绕过双亲委派模型,实现特定的加载需求

  • 相关阅读:
    直线方程和直线系方程
    多个参数之和积的取值范围
    解析几何习题
    React之Perf
    一文看懂npm、yarn、pnpm之间的区别
    Cannot read property 'properties' of undefined
    为什么要用PolyFill(JS中的修补匠)
    es6-promise
    原生js实现each方法
    有趣的js获取input标签中光标的索引
  • 原文地址:https://www.cnblogs.com/benbenzoule/p/13839400.html
Copyright © 2020-2023  润新知