Java 12 发布了, 没有引起很大的讨论. 对于 Java 这样一门成熟的语言来说, 每一次更新似乎都无法满足庞大的 Java 开发群体与生态圈. 再加上 Oracle 对 Java 耐人寻味的态度, Java 的未来会如何?
Java 的变化速度从未如此之快 -- 如今, 该语言的新版本每六个月就会发布一次.
而之所以能够实现如此重大的转变, 自然离不开一系列专注于提高其性能与添加新功能的协作性项目的贡献. 这些项目的目标可谓雄心勃勃. 正如 JetBrains 开发者布道师 Trisha Gee 在 QCon 伦敦 2019 大会上所言,"Java 即将迎来很多超酷的东西."
而发展道路中的以下三大主要项目, 将有助于确定 Java 的未来方向.
一, Loom 项目
尝试改进 Java 语言的并发处理方式, 或者说是在对计算机在不同指令集执行之间切换能力的探索.
甲骨文公司 Loom 项目技术负责人 Ron Pressler 在 QCon 伦敦 2019 大会上向希望编写软件以处理并发任务的 Java 开发者们提出了两种都不够完美的选项: 要么编写无法通过扩展处理大量并发任务的 "简单同步阻塞代码", 要么编写可扩展但编写难度极高且调试过程复杂的异步代码.
为了寻求解决这个问题的方法, Loom 项目引入了一种将任务拆分为线程的新方法 -- 所谓线程, 即是指计算机在运行指令时的最小可能执行单元. 在这方面, Loom 引入了被称为 fibers 的新型轻量级用户线程.
他在大会上指出,"利用 fibers, 如果我们确保其轻量化程度高于内核提供的线程, 那么问题就得到了解决. 大家将能够尽可能多地使用这些用户模式下的轻量级线程, 且基本不会出现任何阻塞问题."
利用这些新的 fibers, 用户将能够扩展 Java 虚拟机 (JVM) 以支持定界延续 (delimited continuations) 机制, 从而使得指令集的执行实现暂停以及恢复. 对这些延续进行暂停与恢复的任务将由 Java 中的 ForkJoinPool 调度程序以异步模式处理.
根据说明文档所言, fibers 将使用与 Java 现有 Thread 类非常相似的 API, 这意味着 Java 开发人员的学习曲线应该不会太过陡峭.
二, Amber 项目
Amber 项目的目标, 在于支持 "更小, 面向生产力的 Java 语言功能" 的开发, 从而加快将新功能添加至 Java 语言中的速度.
这套方案非常适合自 Java 9 以来, 以更快速度持续发布的各 Java 新版本.
目前, 以下 JDK 增强提案 (简称 JEP) 正在进行当中, 并隶属于 Amber 项目之内.
生字符串:
https://openjdk.java.net/jeps/326
生字符串使得开发人员能够更轻松地对文本进行适当格式化, 且无需引入由转义字符带来的复杂性.
举例来说, 开发人员不必使用
转义字符来表示换行符, 因此在以下字符串中:
Hello World
可以直接编写为:
`Hello World`
而非原本的:
"Hello World"
该提案的说明文档中提到, 这一变更将使得各类文本客串的输入变得更加简单, 包括文件路径以及 SQL 语句等等.
如大家所见, 生字符串应被包含在反引号之内.
用于 JDK API 的 Java 编译器 Intrinsic:
https://openjdk.java.net/jeps/348
此项提案将允许开发人员对需要定期调用的重要代码段进行性能优化.
具体来说, 它允许开发人员将特定于 JDK 的方法指定为编译时内部化候选项, 从而指示编译器对其性能进行优化.
考虑到在 Java 当中的重要意义, 此提案的说明文档将 String::format 与 Objects::hash 作为编译时内部化方法示例. 这些方法可以使用 @IntrinsicCandidate 进行注释, 以指示编译器将其视为编译时内部化候选项. 如此一来, JDK 的 javac 编译器即可通过修改创建出内部化进程的处理机制.
- Pattern Matching:
- https://openjdk.java.net/jeps/305
Pattern Matching 能够简化利用 Java 中 instanceof 运算符检查对象是否属于特定类的过程, 而后提取该对象的组件以进行进一步处理.
如此一来, 以下操作语法:
- if (obj instanceof Integer) {
- int intValue = ((Integer) obj).intValue();
- // use intValue
- }
将可被简化为:
- if (x instanceof Integer i) {
- // can use i here, of type Integer
- }
- Switch Expressions:
- https://openjdk.java.net/jeps/325
Switch expressions 已经在 Java 12 当中以预览版形式推出, 允许开发人员利用更简单的语法通过 switch 语句为输入内容指定不同的响应方式.
举例来说, 现在我们不再需要始终在以下语法当中使用 switch 语句:
- switch (port) {
- case 20:
- type = PortType.FTP;
- break;
- }
而可以采取以下更为简洁的表达方式:
- Switch (port) {
- case 20 -> PortType.FTP;
- }
三, Valhalla 项目
Valhalla 项目专注于支持 "高级"JVM 与语言功能的开发.
目前 Valhalla 项目的候选提案还比较有限, 具体包括:
- Value Types:
- https://openjdk.java.net/jeps/169
此项提案旨在允许 JVM 处理一种新的类型, 即 Value Types.
这些新的不可变类型将拥有与 int 等基元类似的内存效率, 但同时又与普通类一样能够保存一整套基元集合. 提案说明文档中指出, 其目标在于 "为 JVM 基础设施提供处理不可变与无引用对象的能力, 从而实现使用非基元类型进行高效按值计算的目标."
- Generic Specialization:
- https://openjdk.java.net/jeps/218
此项提案扩展了适用于泛型的具体类型, 其中包括基元以及即将推出的 Value Types.
英文原文
四, 来自 Oracle 的警告
Java 8 是目前使用率最高的一个 Java 版本, 发布于 2014 年, 而 Oracle 对 Java 8 的官方支持时间持续到 2020 年 12 月, 之后将不再为个人桌面用户提供 Oracle JDK 8 的修复更新; 在 2019 年 1 月之后, 不再提供免费的商业版本更新, 届时想要继续获得 Oracle 的商业支持和维护, 需付费订阅.
来源: http://www.bubuko.com/infodetail-3015598.html