当前位置:   article > 正文

深入解读 Java 9 新特性_java contended locking

java contended locking

导读:经过三年的开发,Java 9 终于在 9 月 21 日发布了,我们一起来看一看 Java 9 中的新特性。另外,大家可能非常关心,Java 语言如何在云计算、大数据等浪潮中快速创新、保持竞争力,本文也介绍一下 Oracle 建议的时间驱动的新发布模式。

杨晓峰,OpenJDK Committer (JDK 9 和 JDK 10 项目),2011 年加入 Oracle 北京研发中心 Java 团队,目前领导 Java 核心类库北京团队,领导或参与了 Java 9,8 和 7 的核心类库等模块的新特性测试和开发工作。个人技术兴趣广泛,主要专注于 Java 等编程语言的发展,尤其是在云计算等前沿领域的应用和演进。

很高兴能有机会通过高可用架构社区和大家交流 Java 9 的主要新特性,由于内容较多,本文仅做一个概要性介绍,希望深入讨论某个方面的更多细节,可以在本文留言探讨。

今天的分享,除了简单介绍 Java 平台模块化项目(Jigsaw ),主要是如下四部分

  • Java 类库新特性,比如支持的新的标准、新的 API 等。

  • 语言和工具的变化。

  • JVM 领域新特性。

  • 简短介绍 Java 未来的发布模式。

基本上是按照目前 JDK 自身组成进行的划分。另外,在开始之前,介绍一个词汇JEP(JDK Enhancement Proposals),这是 Java 9 中 Oracle 为管理新特性引入的概念,后面谈到具体特性时大家会发现每一个都有相应的 JEP 号码。

首先,我们就来看看 Jigsaw 项目。

其核心是实现 Java 平台模块化系统(JSR 376,Java Platform Module System,经常会简化为JPMS),这是个庞大的项目,今天抛砖引玉简单介绍一下。

Mark Reinhold 曾经提到,Jigsaw 试图解决的是两个基础性的问题:

一 、脆弱的、容易出问题的 classpath:

Classpath 就是个非常简陋的容器,Jar 其实也不提供任何边界。所以,各部分的依赖关系是隐式的,或者说是隐晦的。在实际应用中,可能导致所谓的 Jar Hell 问题。例如有可能会出现,应用的不同部分依赖于同一类库的不同版本,进而导致类加载出现不可预计的行为。

ClassLoading 非常复杂,有些行为是不明确的。做过 Java EE 中间件的同学,可能都还记得,某些 Java EE 服务器以讨厌的 ClassNotFoundException、NoClassDefFoundError 之类问题而臭名昭著。

二、JDK 自身是一个大的单体应用,越来越臃肿。这是一个扩展性问题,JDK 自身很难按照不同需求进行定制或者优化,同时也会衍生出安全、维护等各种问题。

所以,Jigsaw 项目的目标,主要是两点:

  • 可靠的配置:明确模块边界和模块之间的依赖关系

  • 强封装性:通过封装模块内部私有细节,来避免不希望发生的依赖关系,也能避免一些安全问题等。

理论上,良好封装能让开发变得更敏捷,因为彼此之间的依赖、交互是明确的,可以鼓励基于契约的开发。

Jigsaw 项目主要被分解为六个JEP:

  • JEP 261: Module System,实现模块化系统;

  • JEP 200: The Modular JDK,将JDK自身进行模块化;

  • JEP 201: Modular Source Code,按照模块化的形式,重构源代码,因为现有代码并不是划分到一个一个的模块里的。

  • JEP 220: Modular Run-Time Images,重新设计JDK和JRE的结构,定义新的URI scheme操作模块,类和资源(jrt)。

  • JEP 260: Encapsulate Most Internal APIs,按照模块化封装性的要求,将不希望暴露的内部API封装起来,如果确实证明是广泛需要的,就作为公共API公开出来。对Java技术,架构技术感兴趣的同学,欢迎加Q君羊:625241190,一起学习,相互讨论

  • JEP 282: jlink: The Java Linker。新的link工具

从开发者的角度,代码和功能主要有下面这些变化:

  • 新增或修改工具和 API,用以在编译、链接和运行时支持模块。例如,基于 Module 的抽象,提供相应的 API 进行解析、配置或运行时操作等。

  • 工具方面,比如,最常用的 javac/java,增加了对模块的支持,支持 module path,另外还提供了各种针对模块的选择。

  • Java9 新增了一个可选的链接阶段(linking Phase),可以方便地创建最小依赖关系的 Java 运行时。

大家可以看看模块化以后的 Java SE:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/460084
推荐阅读
相关标签
  

闽ICP备14008679号