classloader

一 什么是classloader
        我们知道我们写好java程序后,都是由若干个.class文件组成的完整的java应用程序,当程序运行的时候,并不是一次性加载所有的.class文件,而是动态加载.也就是后,从一个class文件中调用另一个class文件中的方法,如果另一个文件不存在,那么就要根据需要,通过java的类加载机制来动态加载所需要的class文件,从而>只有加载到jvm内存中才会被其它class文件使用,所以,classLoader就是动态加载class文件到jvm内存中使用的.
        我们先回想一下类加载的5个过程:
                加载-->验证-->准备-->解析-->初始化 5个阶段.
                而加载的过程需要完成3件事:
                        1)通过一个类的全限定名来获取定义此类的字节流文件
                        2)将这个字节流文件的静态存储结构转化为方法区的运行时结构
                        3)在java堆中生成一个相应的类的java.lang.Class对象,作为方法区的数据访问入口.
        ClassLoader有三个类加载器:
                Bootstrap classloader      Entension classLoader     App  classLoader
                当然我们也可以自定义

三 ClassLoader的加载类的原理:
        1,当App ClassLoader加载一个class时,他不会首先子集区尝试加载,而是交给他的父类extension classLoader加载
        2,当Extension class加载一个class文件时,他也不会首先自己尝试去加载,而是交给父类Brootstrap classLoader去加载
        3,当Brootstrap class加载一个class 文件时,如果加载失败,交给extension class加载,extension class加载失败就交给app classLoader去加载
        4,当都加载失败的情况下,就会抛出ClassNotFoundException异常

四 优势:
        避免重复加载更加安全

五 jvm如何判断两个类是同一个类
        类的全限定名是否相同,是否有同一个类加载器加载

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值