jvm的类加载

  欢迎大家来到我的博客!这是我写的第一个博客,主要分享日常所学和遇到的问题。如果有什么问题欢迎大家指出!

  类的加载主要有7个过程,如下图:  

                                                      

 

 

 

  1.加载

    根据类的权限命名获取储存该类class文件

    何时加载:

    JVM采用懒加载,在根加载器去加载的时候才会被加载

  2.验证

    验证文件格式、符号、元信息、版本号、字节码

  3.准备

    给基本数据类型和引用数据类型预赋值

    如果是用final修饰的属性直接完成赋值

  4.解析

    将间接引用转为直接引用

    间接引用:类、方法在运行时指向在常量池的引用

    直接引用:类、方法运行完成之后有了内存地址,不指向常量池了

  5.初始化

     执行静态代码块

  6.使用

  7.卸载

 

  jvm的类加载器分为三种:

    启动类加载器(BootStrapClassLoader)、扩展类加载器(ExtensionClassLoader)、应用类加载器(ApplicationClassLoder)

    启动类加载器由C++实现;

    扩展类加载器由启动类加载器加载,parent为null

    应用类加载器由启动类加载器加载,parent为扩展类加载器

    

 

 

   什么是启动类加载器?

    启动类加载器没有实体,只是将那一段逻辑定义为启动类加载器

       不同的类加载器加载同一个类,相等吗?为什么

    不相等。因为每一个类加载器在方法区都有自己独有的存储空间

  什么是双亲委派?

    自定义加载器接受到类加载的请求,就去查找自己是否加载过这个类,加载过就返回;没有加载过就委托给应用类加载器;以此类推一直向上查找,双亲委派最后都没有找到就在自己类加载器中再查找一次,在没有找到就会报错

  双亲委派的局限性:

    不能向下委托或者不委托

  什么是打破双亲委派?

    类加载器向下委托或者不委托

  打破双亲委托的两种方式:(有待完善)

    1.自定义加载器

    2.SPI机制(如driver)

  

    

  

posted @ 2021-03-09 15:44  小菜鸟儿的学习笔记  阅读(43)  评论(0)    收藏  举报