java模块化系统

建议参考: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值