Java类加载器:坑爹是我的特色

沙海 2021年5月25日12:55:34Java评论30字数 2318阅读7分43秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/25761.html

今天的主角是「在日常开发中,存在感非常低的类加载器」,众所周知大佬除了头发比较少,还非常低调,如果想和大佬交朋友,那一定要先认识大佬,下面带大家认识一下类加载器(本文不涉及源码)。当程序使用某个Java类时,JVM虚拟机会加载它的.class文件到虚拟机的内存中,负责加载工作的就是类加载器。JVM虚拟机提供了3种类加载器,它们分别是启动类加载器(Bootstrap)、扩展类加载器(Extension)、系统类加载器(System)。文章源自JAVA秀-https://www.javaxiu.com/25761.html

原文约 1930 | 图片 23 | 建议阅读 4 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色

小黑格子屋 文章源自JAVA秀-https://www.javaxiu.com/25761.html

以下文章来源于程序猿阿星,作者点击关注 ?文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

程序猿阿星文章源自JAVA秀-https://www.javaxiu.com/25761.html

一起成长进阶!专注技术原理、源码,通过图解方式输出技术,这里将会分享操作系统、计算机网络、Java、分布式、数据库等精品原创文章文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

来源:程序员阿星文章源自JAVA秀-https://www.javaxiu.com/25761.html

作者:阿星文章源自JAVA秀-https://www.javaxiu.com/25761.html

今天的主角是「在日常开发中,存在感非常低的类加载器」,众所周知大佬除了头发比较少,还非常低调,如果想和大佬交朋友,那一定要先认识大佬,下面带大家认识一下类加载器(本文不涉及源码)。文章源自JAVA秀-https://www.javaxiu.com/25761.html

什么是类加载器

我们平时写了那么多的Java代码,却不知Java类的加载过程,岂不是很尴尬,为了打破尴尬,阿星得从Java类说起。文章源自JAVA秀-https://www.javaxiu.com/25761.html

我们编写的Java类也就是.java文件,通过Java编译器编译成.class文件,.class文件中保存着Java代码转换后的虚拟机指令。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

当程序使用某个Java类时,JVM虚拟机会加载它的.class文件到虚拟机的内存中,负责加载工作的就是类加载器文章源自JAVA秀-https://www.javaxiu.com/25761.html

类加载过程

其实类加载器和日常生活中坐地铁过安检是一样的道理,不信你看下面的图文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

安检要经过一系列的检查过程,目的是让进入地铁站的人群符合乘坐标准,比如你不能感冒,不能带威胁人生安全的物品等。文章源自JAVA秀-https://www.javaxiu.com/25761.html

同样类加载也要经过一系列检查过程,这个过程称为类加载过程文章源自JAVA秀-https://www.javaxiu.com/25761.html

类加载过程分为加载、验证、准备、解析、初始化,下图是对类加载过程简单的介绍。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

类加载过程不是本文的重点,如果对这块有兴趣深入研究的伙伴可以去自行百度或google。文章源自JAVA秀-https://www.javaxiu.com/25761.html

下面要说说本文的重点,双亲委派模式文章源自JAVA秀-https://www.javaxiu.com/25761.html

实力坑爹

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

双亲委派机制有点像实力坑爹,出了什么事情都让爹去擦屁股,爹解决不了,自己才承担。文章源自JAVA秀-https://www.javaxiu.com/25761.html

JVM虚拟机提供了3种类加载器,它们分别是启动类加载器(Bootstrap)、扩展类加载器(Extension)、系统类加载器(System)。文章源自JAVA秀-https://www.javaxiu.com/25761.html

每个类加载器都有明确的加载范围:文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 启动类加载器(Bootstrap):加载<JAVA_HOME>/lib路径下的核心类库文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 扩展类加载器(Extension):加载<JAVA_HOME>/lib/extl路径下的文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 系统类加载器(System):加载系统类路径classpath,也就是我们经常用到的classpath路径,一般情况该类加载器是程序中默认的类加载器文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

双亲委派模式的原理也十分简单,类加载器收到类加载请求,会委托给父类加载器去执行,父类加载器还存在其父类加载器,则进一步向上委托,依次递归,直到顶层类加载器,如果顶层类加载器加载到该类,就成功返回class对象,否则委托给下级类加载器去执行,依次递归(此处的父子关系并非通常所说的继承关系,而是采用组合关系来实现)。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

用大白话来说就是,每个儿子都很懒,有事就丢给爹去干,直到爹说这件事我也干不了,儿子自己再想办法完成。文章源自JAVA秀-https://www.javaxiu.com/25761.html

双亲委派模式是为了避免重复加载和核心类篡改。文章源自JAVA秀-https://www.javaxiu.com/25761.html

特殊需求

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

在日常开发中,我们可能会有特殊的业务需求,可能就需要使用到自定义类加载器,该加载器的上级一定是系统类加载器文章源自JAVA秀-https://www.javaxiu.com/25761.html

你们想要的特殊需求

  • 资源隔离文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • web容器可能需要部署两个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,因此要保证每个应用程序的类库都是独立的,相互隔离文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • web容器有自己依赖的类库,不能与应用程序的类库混淆,基于安全考虑,应该让容器的类库和程序的类库隔离文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 加密保护文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • 公司的一些核心类库,可能会把字节码加密,这样加载类的时候就必须对字节码进行解密文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 其他来源加载类文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • 字节码是放在数据库、硬盘其他路径、甚至是在云端文章源自JAVA秀-https://www.javaxiu.com/25761.html

  • 类重新加载文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • JVM中类对象的唯一性:类加载器实例+完整类名文章源自JAVA秀-https://www.javaxiu.com/25761.html

    • 程序运行中,类内容发生变化,创建自定义加载器实例重新加载类,达到的热部署效果。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

这里大家有个概念,理解下就够了,想深入探索就需要涉及源码分析,如果大伙有兴趣,评论区留言,阿星后续单独补一篇源码分析~文章源自JAVA秀-https://www.javaxiu.com/25761.html

强大的父亲

有些爹的实力恐怖如斯,为了啥事都能帮后代处理好,直接破坏双亲委派模式,深受孩儿们的喜爱。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java应用中存在着很多服务提供者接口(Service Provider Interface,SPI),这些接口允许第三方为它们提供实现,如常见的SPIJDBC、JNDI等,这些SPI的接口属于Java核心库,一般存在rt.jar包中,由启动类加载器(Bootstrap)加载,而SPI的第三方实现代码则是作为Java应用所依赖的jar包被存放在classpath路径下。文章源自JAVA秀-https://www.javaxiu.com/25761.html

由于SPI接口中的代码需要加载第三方实现类并调用其相关函数,但SPI的核心接口类是由启动类加载器(Bootstrap)加载的,Bootstrap加载器无法直接加载SPI的实现类。文章源自JAVA秀-https://www.javaxiu.com/25761.html

在这种情况下,我们就需要一种特殊的类加载器来加载第三方的类库,它就是线程上下文类加载器,线程的上下文类加载器默认设置的就是系统类加载器(System)。文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

非常感谢各位小哥哥小姐姐们能看到这里,文章有帮助可以关注、点个赞、分享与评论,都是支持(莫要白嫖)!文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

-End-

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

25种代码坏味道总结+优化示例文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

加班后去吃蛋炒饭,没想到老板也是程序员文章源自JAVA秀-https://www.javaxiu.com/25761.html

文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

把Redis当作队列来用,真的合适吗?文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色 可乐记得加冰,爱我就要置顶 Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

Java类加载器:坑爹是我的特色素质三连biubiubiu~Java类加载器:坑爹是我的特色文章源自JAVA秀-https://www.javaxiu.com/25761.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定