Java 10新特性前瞻

2017 年 11 月 22 日

从 Java 9 发布到现在已经过去两个月了,根据最新的发布计划,距离下一个Java 版本发布只有四个月时间。Java 10 的新特性还在确认当中,所以从现在到GA 版中间还是有可能加入重大的变更。不管怎样,在这四个月里,开发者还是可以期待一些新的特性能够被添加到Java 10 中。

新的特性和增强一般通过 Java Enhancement Process (JEP)或 Java Community Process 标准请求(JSR)进行跟踪。因为 Java 10 的时间线较短,范围也相对较小,所以 Java 10 的变更将通过 JEP 进行跟踪。

有望被包含在 Java 10 中的特性是那些已经处于 Targeted 或 Proposed 状态的 JEP,它们包括:

  • 286:本地变量类型推断
  • 296:统一 JDK 仓库
  • 304:垃圾回收器接口
  • 307:G1 的并行 Full GC
  • 310:应用程序类数据共享
  • 312:ThreadLocal 握手机制

JEP 296 是一次纯粹的清理工作,而 JEP 304 加强了不同垃圾回收器的代码隔离,并为垃圾回收器引入更简洁的接口。

JEP 304 意味着厂商可以更自由地选择特定的 GC 算法来构建 JDK,因为现在有多种处于开发当中的 GC,如 Shenandoah ZGC Epsilon ,在未来可以使用这些 GC 算法。社区也在努力弃用甚至移除Concurrent Mark Sweep(CMS)垃圾回收器,只是目前还没有可用的替代品。

比较有意思的变更或许是JEP 286,增强的本地变量类型推断可以让开发者免去很多变量申明模板代码。也就是说,在下一个版本中,下面的变量声明是合法的:

复制代码
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>

这种语法只限于初始化过的本地变量和 for 循环中的本地变量。

它其实是个语法糖,在语义上并没有任何变化。不过,该特性有可能在 Java 开发者当中引起热议。

其他三个变更都将在性能方面带来一些影响。

JEP 307 解决了 G1 垃圾回收器的一个问题——截止到 Java 9,G1 的 Full GC 采用的是单线程算法。也就是说,G1 在发生 Full GC 时会严重影响性能。JEP 307 的目的就是要采用并行 GC 算法,在发生 Full GC 时可以使用多个线程进行并行回收。

JEP 310 对类数据共享(CDS)进行了扩展,JVM 可以将一些类记录到一个共享的压缩文件里,在 JVM 下一次启动时可以将这个文件映射到 JVM 进程,以此来减少启动时间。该文件也可以在多个 JVM 间共享,在同一个机器上运行多个 JVM 时,这样做可以减少内存占用。

该功能在 Java 5 中就已存在,但截止到 Java 9,该功能只允许 bootstrap 类加载器加载压缩的类。JEP 310 的目的是扩展该功能,让应用程序和自定义类加载器也能加载压缩的类。该特性目前仅在 Oracle JDK 中可用,OpenJDK 并不包含该特性。

JEP 计划将该特性从 Oracle 私有仓库中迁移到公共仓库,从 Java 10 往后,常规版本(非 LTS)将会使用 OpenJDK 的二进制包。此举表明有用户正在使用该特性,所以需要在 OpenJDK 中也支持该特性。

JEP 312 旨在改进虚拟机性能,在应用程序线程上调用回调不再需要执行全局虚拟机安全点操作,这意味着 JVM 可以停止单个线程。一些底层小改进包括:

  • 降低堆栈跟踪取样所带来的影响(如进行 profiling)。
  • 减少信号依赖以获得更好的堆栈取样。
  • 通过停止单独线程改进偏向锁。
  • 从 JVM 移除了一些内存屏障。

从整体来看,Java 10 似乎并没有包含重大新特性或性能改进。这是可以理解的,毕竟这是新发布周期下的第一个版本。

查看英文原文 Java 10 - The Story So Far

2017 年 11 月 22 日 18:0012368
用户头像

发布了 321 篇内容, 共 107.7 次阅读, 收获喜欢 101 次。

关注

评论

发布
暂无评论
发现更多内容

面试造飞机系列:说下微服务接口设计原则?

柠檬橙

分布式 微服务 后端 架构设计

用大数据分析了一线城市1000多份岗位招聘需求,告诉你如何科学找工作

柠檬橙

Python 数据分析

Linux下程序出问题不要慌,资深程序员教你6招搞定!

柠檬橙

Linux 程序员 后台开发

谈谈控制感(12):选择什么样的工作

史方远

读书笔记 个人成长 随笔杂谈

Prometheus 2.18.0 新特性

耳东

Prometheus

Linux命令-df

一周思进

ARTS|Week 01 (2020第22周)

MiracleWong

算法 写作 ARTS 打卡计划

如何衡量产品需求效果

黄大路

产品经理 产品设计 运营

Wireshark的使用与数据分析(一)

姬翔

ARTS-week-1

saddamwilson

ARTS 打卡计划

游戏夜读 | 记忆里的老游戏

game1night

推荐几款有意思的小众App(05.30)

静陌

产品 App

github看代码效率提高10倍!因为用了sourcegraph这个工具

柠檬橙

GitHub 程序员 效率工具

带你学够浪:Go语言基础系列-环境配置和 Hello world

柠檬橙

golang 后台开发

遇事不决,请先 「搜索」

Sicolas Flamel

个人成长 职场 随笔杂谈

云上基础产品之对象存储

韩超

对象存储 公有云 S3

云上基础产品之虚拟私有云

韩超

公有云 VPC 虚拟私有云

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试

编程道与术

Java 编程 TDD 单元测试 JUnit

JMM的前世今生

fkc_zyk

重排序 volatile happens-before JMM cpu

是什么奠定了架构师的职场地位?

刁架构

极客大学架构师训练营

10分钟白嫖我的常用的在线工具网站清单

Guide哥

设计 在线工具 工具类网站 PDF

分布式锁🔒是个啥❓ 其实就这么点事

山中兰花草

Java redis 后端 分布式锁 开发

思维模型 - 概念篇

石云升

学习 高效 思维模型 决策

带你学够浪:Go语言基础系列 - 8分钟学基础语法

柠檬橙

程序员 后台开发 golan

云上基础产品之内容分发网络

韩超

CDN 公有云 内容分发网络

【摘】Git-从零单排 02期

卡尔

git 原理 开发工具 工具链

使用 PCA 进行降维可视化,了解特征分布

黄大路

数据挖掘 数据分析 可视化

Python 进阶与核心技术 dict & set

Bonaparte

Python 极客时间

程序员的晚餐 | 5 月 30 日 入梅天,来一盆小龙虾

清远

美食

PageHelper

BitSea

云上基础产品之负载均衡

韩超

负载均衡 公有云

Java 10新特性前瞻-InfoQ