Java类加载器(ClassLoader)的实际使用场景有哪些

实际使用场景有:1、依赖冲突;2、热加载;3、热部署;4、加密保护。依赖冲突指基于maven的pom进制可以方便的进行依赖管理,但是由于maven依赖的传递性,会导致我们的依赖错综复杂,这样就会导致引入类冲突的问题。

Java类加载器(ClassLoader)的实际使用场景有哪些-Worktile社区

1、依赖冲突

做过多人协同开发的大型项目的同学可能深有感触。基于maven的pom进制可以方便的进行依赖管理,但是由于maven依赖的传递性,会导致我们的依赖错综复杂,这样就会导致引入类冲突的问题。最典型的就是NoSuchMethodException异常了。

该如何避免依赖冲突的问题呢?首先我们用一个非常简单的场景来描述为什么会出现类冲突的问题。

某个业务引用了消息中间件(例如metaq)和微服务中间件(例如dubbo),这两个中间件也同时引用了fastjson-2.0和fastjson-3.0版本,而业务自己本身也引用了fastjson-1.0版本。这三个版本表现不同之处在于classA类中方法数目不相同,我们根据maven依赖处理的机制,引用路径最短的fastjson-1.0会真正作为应用最终的依赖,其它两个版本的fastjson则会被忽略,那么中间件在调用method2()方法的时候,则会抛出方法找不到异常。

那如何解决包冲突的问题呢?答案就是pandora(潘多拉),通过自定义类加载器,为每个中间件自定义一个加载器,这些加载器之间的关系是平行的,彼此没有依赖关系。这样每个中间件的classloader就可以加载各自版本的fastjson。因为一个类的全限定名以及加载该类的加载器两者共同形成了这个类在JVM中的惟一标识,这也是阿里pandora实现依赖隔离的基础。

2、热加载

在开发项目的时候,我们需要频繁的重启应用进行程序调试,但是java项目的启动少则几十秒,多则几分钟。如此慢的启动速度极大地影响了程序开发的效率,那是否可以快速的进行启动,进而能够快速的进行开发验证呢?答案也是肯定的,通过classloader我们可以完成对变更内容的加载,然后快速的启动。

常用的热加载方案有好几个,接下来我们介绍下spring官方推荐的热加载方案,即spring boot devtools。

首先我们需要思考下,为什么重新启动一个应用会比较慢,那是因为在启动应用的时候,JVM虚拟机需要将所有的应用程序重新装载到整个虚拟机。可想而知,一个复杂的应用程序所包含的jar包可能有上百兆,每次微小的改动都是全量加载,那自然是很慢了。那么我们是否可以做到,当我们修改了某个文件后,在JVM中替换到这个文件相关的部分而不全量的重新加载呢?而spring boot devtools正是基于这个思路进行处理的。

3、热部署

热部署本质其实与热加载并没有太大的区别,通常我们说热加载是指在开发环境中进行的classloader加载,而热部署则更多是指在线上环境使用classloader的加载机制完成业务的部署。所以这二者使用的技术并没有本质的区别。那热部署除了与热加载具有发布更快之外,还有更多的更大的优势就是具有更细的发布粒度。我们可以想像以下的一个业务场景。

假设某个营销投放平台涉及到4个业务方的开发,需要对会场业务进行投放。而这四个业务方的代码全部都在一个应用里面。因此某个业务方有代码变更则需要对整个应用进行发布,同时其它业务方也需要跟着回归。因此每个微小的发动,则需要走整个应用的全量发布。这种方式带来的稳定性风险估且不说,整个发布迭代的效率也可想而知了。这在整个互联网里,时间和效率就是金钱的理念下,显然是无法接受的。

那么我们完全可以通过类加载机制,将每个业务方通过一个classloader来加载。基于类的隔离机制,可以保障各个业务方的代码不会相互影响,同时也可以做到各个业务方进行独立的发布。其实在移动客户端,每个应用模块也可以基于类加载,实现插件化发布。本质上也是一个原理。

4、加密保护

众所周期,基于java开发编译产生的jar包是由.class字节码组成,由于字节码的文件格式是有明确规范的。因此对于字节码进行反编译,就很容易知道其源码实现了。因此大致会存在如下两个方面的诉求。例如在服务端,我们向别人提供三方包实现的时候,不希望别人知道核心代码实现,我们可以考虑对jar包进行加密,在客户端则会比较普遍,那就是我们打包好的apk的安装包,不希望被人家反编译而被人家翻个底朝天,我们也可以对apk进行加密。

延伸阅读:

什么是Java类加载器?

Java类加载器(Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。

Java类加载器(英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即名列前茅次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。学习类加载器时,掌握Java的委派概念很重要。

每个Java类必须由某个类加载器装入到内存。Java程序可以利用外部库(即由其他作者编写的软件库)。

Java EE(JEE)应用程序服务器典型地用树状的一组类装载器从已部署的WAR或EAR文档中装入类。这使得应用程序之间彼此隔离,但共享已部署模块。servlet container一般被实现为多个类装载器。

Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让计算机系统运行Java应用程序(Java Application)。

JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)。

文章标题:Java类加载器(ClassLoader)的实际使用场景有哪些,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37333

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月7日 下午9:53
下一篇 2023年2月7日 下午9:56

相关推荐

  • oa办公系统有哪些功能

    OA办公系统具备多种功能分别为:1、文件流转管理、2、电子邮件系统、3、日程安排、4、即时通讯、5、任务和项目管理、6、报表工具、7、考勤管理、8、人力资源管理。其中,文件流转管理 使得文档的审批、分发和存档过程自动化与电子化,极大提升办公效率。 一、文件流转管理 OA系统中的文件流转功能是确保文档…

    2024年1月11日
    12900
  • 甘特图在市场营销项目管理中的作用是什么

    该主题可以解释成为甘特图为市场营销项目管理提供了时间规划与监控、资源分配可视化、团队沟通改善、进度追踪和风险管理等关键作用。这些工具有助于提升工作效率、记录和呈现信息,以及确保项目按时完成。 甘特图在市场营销项目管理中关键作用涵盖了:1、时间规划与监控;2、资源分配可视化;3、团队沟通改善;4、进度…

    2023年12月21日
    13900
  • 国产化oa系统

    国产化OA系统是解决企业内部日常办公自动化的有效手段,关键性因素包括:1、数据安全性增强;2、满足本土化需求;3、提高办公效率;4、成本控制优势明显。 其中,数据安全性增强 是国产化OA系统中最受关注的优势。本土开发的系统可以更好地遵循国家法律法规,针对本国企业的安全管理需要定制各种安全策略,包括但…

    2024年1月12日
    10000
  • oa邮箱地址

    OA邮箱地址是一种机构内部通讯工具,操作简便、保密性强、管理集中、具有多功能服务。1、企业通常通过OA邮箱地址来进行内部文件的分享与通信,确保信息流转快捷且安全。2、其特色服务包括邮件归档、会议协调、任务分配等增强工作效率的功能。OA邮箱使员工能够远程访问数据,加快决策流程,实现高效的时间管理。 详…

    2024年1月16日
    12300
  • 什么是主动学习

    主动学习是机器学习中的一种策略,它允许模型在训练过程中选择自己认为最有价值的数据进行学习,而不是被动地接受所有提供的数据。通过这种方式,主动学习试图用更少的标注数据获得更高的性能,减少人工标注的成本和时间。 主动学习是机器学习中的一种策略,它允许模型在训练过程中选择自己认为最有价值的数据进行学习,而…

    2023年7月30日
    34000
  • VR 时代的主流编程语言是什么

    VR 时代的主流编程语言有:1、C#;2、C++语言;3、Java;4、其他计算机图形学与GPU编程。C#基础语法与算法、面向对象编程、C#是数据结构与高级语法,是做U3D的基础语言。而Unity把C#当作脚本语言使用。 1、C# C#基础语法与算法、面向对象编程、C#是数据结构与高级语法,是做U3…

    2023年2月21日
    44200
  • 公司里oa是什么意思

    OA在公司中通常指的是办公自动化系统(Office Automation)。这一系统用于提升公司内部工作效率,支持文档管理、电子邮件、信息发布等功能,也可包括企业资源规划、客户关系管理等模块。特别是在提高跨部门沟通效率方面,OA系统通过提供一个共享的平台以支持信息的快速流通,减少纸质文件的使用,加快…

    2024年1月11日
    11200
  • 项目总体计划工具有哪些

    项目总体计划工具有:一、Worktile;二、PingCode;三、Ms project;四、Jira。Worktile是国内最拔尖的项目计划、进度管理工具之一,它能做到多项目统筹管理,通过项目集、项目组合管理实现项目资源共享,统筹管理项目集内各项目状态、任务数以及任务进度。 一、Worktile …

    2023年4月27日
    27100
  • 仓库出入库管理系统设计

    仓库出入库管理系统是为了提高物资管理效率、确保库存准确性而设计的。主要功能有1、物品登记、2、库存跟踪、3、出入库记录、4、库存报警、5、报表统计。系统通过物品登记实现识别与分类管理,其中详细对物品信息进行录入与更新,确保每件物品都能被准确追踪。库存跟踪是核心环节,涉及实时库存水平、位置追踪以及货物…

    2024年1月9日
    15700
  • 常见企业管理SAAS软件有哪些

    常见企业管理SAAS软件有:1、Worktile;2、PingCode;3、Asana;4、Wrike;5、Jira。Worktile 是国内的一款老牌通用项目管理系统,具有非常高的功能成熟度,是一款非常适合中小企业的项目管理系统。 一、Worktile Worktile 是国内的一款老牌通用项目管…

    2023年4月29日
    72400

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部