前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java模块化系统

java模块化系统

作者头像
逍遥壮士
发布2021-03-23 14:45:27
6260
发布2021-03-23 14:45:27
举报
文章被收录于专栏:技术趋势技术趋势

建议参考:https://www.journaldev.com/13106/java-9-modules

JDK 9 进行了一次重大的升级引入了模块化系统。其目的是:能够实现模块化的关键目标——可配置的封装隔离机制

模块化解决了什么问题?

减少环境资源的开销和降耦合度:在JDK 9之前每次启动JVM都要耗费至少 30MB~60MB的内存空间,其主要原因是JVM需要加载rt.jar,不管是否用到其中的类是否被加载,第一步就是要将整个rt.jar加载到内存中去,这样极大的浪费了内存空间,而JDK 9开始就可以选择性的模块进行加载

提升开发效率和运行速度:由于代码库越来越复杂会导致,开发的效率降低和运行速度变慢。

规范化各种路径及依赖关系使系统更安全:jdk9之前系统没有对不同jar之间的依赖或敏感路径进行限制,导致所有的jar都是可以被访问到无形中暴露安全性的问题,jdk9后使用模块来管理各个模块使用的模块可以进入引用,不使用的则进行隐藏,这样即安全又减省空间。

模块化后的路劲访问规则?

JAR文件在类路径的访问规则?

所有类下JAR文件和其他资源文件,会被自动打包到匿名模块(Unnamed Module),这个模块没有任何隔离。

JAR文件在模块路径的访问规则?

自动模块将默认依赖整个模块路径中的所有模块,可以访问所有模块的包,也可以导出自己所有包。

模块在模块路径的访问规则?

模块路径下具名模块(Named Module)只能访问明确定义的依赖和模块包。

模块化后的类加载器

模块后的类加载器在双亲委派机制上进行调整:

原有的拓展类加载器被平台类加载器所取代;

平台类加载器和应用程序类加载器都不再继承自java.net.URLClassLoader,而是全部继承来自 jdk.internal.loader.BuiltinClassLoader。

原来的类双亲委派机制也发现了改变,当平台及应用类加载器接收到请求,再委派给父类之前,先判断该类是否能够归属于某一个系统模块中,如果可以找到这样的归属关系,就先委派给这个模块的类加载器完成加载,这样算是第四次打破双亲委派机制了。

最后

当然JDK9功能很新颖,类加载机制的改变及模块后可以节省我们大量的内存空间,并且在加载外部jar包未成功的时候可以很明显的提示,也一定上起到解耦作用,可惜国内目前的JDK 还是8的版本,所以功能再好目前各大厂也没有推进,所以只能先自学,以待将来某些必要条件发生推动使用。

参考文章:

https://www.journaldev.com/13106/java-9-modules

https://www.cnblogs.com/IcanFixIt/p/6947763.html

https://blog.csdn.net/weixin_40391011/article/details/104057515

https://www.ktanx.com/blog/p/3722

https://www.pianshen.com/article/16291271764/

https://blog.csdn.net/weixin_40391011/article/details/104057515

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档