早晨上班在地跌里看到“阿里技术”公众号显示的“基于Java的模块化开发框架JarsLink”, 感觉很屌的样子,上午就迫不及待的看了源码。
JarsLink顾名思义是动态加载jar包, 跟阿里Dubbo的区别在于JarsLink依赖于宿主进程执行, Dubbo调用者/被调用者是多进程运行。
JarsLink的厉害之处在动态加载jar、还能卸载jar, 同样是Java语言,Android似乎不能动态卸载jar。
动态加载jar的核心是实例化一个上下文和ClassLoader, 从而实现类隔离。
ClassLoader默认逻辑是双亲委托, 即同一个类只能被加载一次, JarsLink覆盖了这个逻辑从而能多次加载同一个类;
动态卸载jar就是关闭资源、关闭上下文、下载类加载器。(PS:Android能动态卸载吗? 貌似不行)
JarsLink是通过定时器扫描module版本变化来卸载老jar、状态新jar, 定时器(用线程池实现)默认60秒判断当前加载的jar是否需要更新。
小结: JarsLink依赖于Springframework, 通过实例化上下文和ClassLoader实现动态加载、卸载jar/类的功能; Android还没有动态卸载jar或类的功能。
本文探讨了阿里JarsLink框架的原理,它允许动态加载和卸载jar包,区别于Dubbo的多进程交互。JarsLink通过定制ClassLoader打破了Java的双亲委托机制,实现了类的重复加载。同时,它使用定时器检测模块版本变化以实现动态更新。然而,与Android不同,JarsLink目前无法实现Android上的动态卸载功能。

1648

被折叠的 条评论
为什么被折叠?



