探索JVM底层奥秘ClassLoader源码分析与案例讲解

1.JVM运行流程,JVM基本结构

JVM基本结构

    类加载器,执行引擎,运行时数据区,本地接口

    class Flies ->ClassLoader->运行时数据区->执行引擎,本地库接口->本地方法库

类的装载;

    加载,连接(验证,准备,解析),初始化,(实例化)使用(对象),卸载

        加载:取得类的二进制的字节流,把字节流中的一些静态存储结构转化为数据区,(静态存储结构)放在方法区

       加载后产生一个类的类对象,保存一个类的定义(结构),类对象放在堆中。

        初始化:执行类的构造器(CLINIT)为类的静态变量赋予正确的初始值

                类的构造器:

                        1.static变量

                        2.static{}语句

                  构造方法:实例化对象

2.类加载器双亲委派模型讲解

      ClassLoader试图加载类的时候,必须先把任务委托给父类加载器加载,如果父类加载器没有加载这个类的时候。,

      如果父类没有加载的话就会反过来给发起者。由发起者自己本身来加载这个类,如果自己本身也没有加载的话

      就会报一个classnotfondexception的异常。

问题1:为什么要用双亲委派模型?

              主要是为了避免类的重复加载,当父类已经加载了子类就不要加载了。

 问题2:ClassLoader有哪几种?

       BootStrap ClassLoader   启动类加载器     ---》 rt.jar

                        要执行Java程序  jvm自己先启动,就要一个启动器 就是BootStrap ClassLoader

       Extension  ClassLoader   扩展类加载器       -->%JAVA_HOME%/LIB/ext/*.jar        父类是启动类加载器

        App ClassLoader    系统类加载器     -->Classpath        父类是扩展类加载器

        这些类加载器都会继承ClassLoader


        自定义类加载器必须继承ClassLoader       -->完全自定义加载路径       父类是系统类加载器

               

3.ClassLoader源码分析

      3.1. 先传入类的路径,一个二进制的名称


       3.2.先判断是不是已经加载了,如果已经加载就返回。如果没有加载就从他的父亲去加载


          3.3.如果父亲没有加载到是个null,就在自定义的类加载器中加载,如果findClass都没有找到的话就会抛出一个异常



4.从源码分析实现自定义类加载器

   没写


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值