java9模块化 jre_JDK9引入模块化系统,类加载器发生了变化,你知道吗?

JDK9引入模块化系统,导致类加载器架构发生变化。扩展类加载器被平台类加载器取代,libext目录消失。JDK9的类加载器不再遵循双亲委派模型,而是先尝试归属模块加载。同时,jre目录被取消,可通过`jlink`构建定制化JRE。平台和应用类加载器不再继承自URLClassLoader,而是从BuiltinClassLoader派生。启动类加载器在JDK9中实现内部化,Object.getClassLoader()仍返回null。
摘要由CSDN通过智能技术生成

53677bffd7f8cce552bc600a93f12798.png

不积跬步,无以至千里;不积小流,无以成江海。——荀子

引导语

JDK9引入模块化系统,同时类加载器不再遵循双亲委派模型,发生了些变化,下面一一道来。

1 模块下的类加载器

JDK9之前,JDK1.2以来,类加载其遵循:三层类加载器架构和双亲委派模型。

模块化系统的施行,类加载器发生了变化:

1. 扩展类加载器(Extension ClassLoader)被平台类加载器(Platform ClassLoader)取代。同时整个JDK都基于模块化进行构建(其中原来的rt.jar和tools.jar被拆分成数十个JMOD文件),其中的Java类库已满足了可扩展的需求,所以无须再保留\lib\ext目录,之前使用这个目录或者java.ext.dirs系统变量来扩展JDK功能的机制已经没用存在的价值了。

新版本JDK中同时取消了\jre目录,因为随时可以组合构建出程序运行所需的JRE,举例:

只使用java.base模块中的类型,组合JRE

jlink -p $JAVA_HOME/jmods --add-modules java.base --output jre

2. 平台类加载器和应用程序类加载器都不再派生自java.net.URLClassLoader,如果有程序直接依赖了这种继承关系,或者依赖了URLClassLoader类的特定方法&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值