java类的加载方式有哪些_java类加载的概念与常用加载方式都有哪些

类加载我程序员在学习编程开发技术的时候需要重点掌握的一个编程知识,而今天我们就通过案例分析来了解一下,java类加载的概念与常用加载方式都有哪些。

e4dc1529f344fea9d29c455295961643.png

什么是类加载器

类加载器(ClassLoader)就是在系统运行过程中动态的将字节码文件加载到JVM中的工具,基于这个工具的整套类加载流程,我们称作类加载机制。我们在IDE中编写的都是源代码文件,以后缀名.java的文件形式存在于磁盘上,通过编译后生成后缀名.class的字节码文件,ClassLoader加载的就是这些字节码文件。

双亲委派

当我们要加载一个应用程序classpath下的自定义类时,AppClassLoader会先查看自己是否已经加载过这个类,如果已经加载过则直接返回类的实例,否则将加载任务委托给自己的父加载器ExtClassLoader。同样,ExtClassLoader也会先查看自己是否已经加载过这个类,如果已经加载过则直接返回类的实例,否则将加载任务委托给自己的父加载器BootStrapClassLoader。

BootStrapClassLoader收到类加载任务时,会先检查自己是否已经加载过这个类,如果已经加载则直接返回类的实例,否则在自己负责的加载路径下搜索这个类并尝试加载。如果找到了这个类,则执行加载任务并返回类实例,否则将加载任务交给ExtClassLoader去执行。

ExtClassLoader同样也在自己负责的加载路径下搜索这个类并尝试加载。如果找到了这个类,则执行加载任务并返回类实例,否则将加载任务交给AppClassLoader去执行。

全盘负责

「全盘负责」是类加载的另一个原则。它的意思是如果类A是被类加载器X加载的,那么在没有显示指定别的类加载器的情况下,类A引用的其他所有类都由类加载器X负责加载,加载过程遵循「双亲委派」原则。

为什么需要自定义类加载器

自定义类加载器的用处有很多,这里简单列举一些常见的场景。

从任意位置加载类。JVM预定义的三个类加载器都被限定了自己的类路径,我们可以通过自定义类加载器去加载其他任意位置的类。

解密类文件。比如我们可以对编译后的类文件进行加密,然后通过自定义类加载器进行解密。当然这种方法实际并没有太大的用处,因为自定义的类加载器也可以被反编译。

支持更灵活的内存管理。我们可以使用自定义类加载器在运行时卸载已加载的类,从而更高效的利用内存。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值