自 2 月 7 日开始,Java 12 / JDK 12 就进入了 RC 阶段。按照发布周期,美国当地时间 3 月 19 日,也就是今天——Java 12 正式发布了!

Java 12 新特性

Java 12 带来了一系列新特性:

下边分别来看看:

JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)

Shenandoah:低暂停时间的 GC(实验性功能)

新增了一个名为 Shenandoah 的 GC 算法,通过与正在运行的 Java 线程同时进行 evacuation 工作来减少 GC 暂停时间。使用 Shenandoah 的暂停时间与堆大小无关,这意味着无论堆是 200MB 还是 200GB,都将具有相同的暂停时间。

JEP 230: Microbenchmark Suite

微基准测试套件

JDK 源码中新增了一套微基准测试套件,开发人员可通过它轻松运行已有的微基准测试并创建新的基准测试。

JEP 325: Switch Expressions (Preview)

Switch 表达式(预览功能)

对 switch 语句进行了扩展,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的 "case L ->" 模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。

JEP 334: JVM Constants API

JVM 常量 API

引入 API 来对关键类文件(key class-file)和运行时工件(run-time artifacts)的名义描述(nominal descriptions)进行建模,特别是可从常量池加载的常量。

在新的 java.lang.invoke.constant 包中定义了一系列基于值的符号引用(JVMS 5.1)类型,它们能够描述每种可加载常量。

符号引用以纯 nominal 形式描述可加载常量,与类加载或可访问性上下文区分开。有些类可以作为自己的符号引用(例如 String),而对于可链接常量,定义了一系列符号引用类型(ClassDesc、MethodTypeDesc、MethodHandleDesc 和 DynamicConstantDesc),它们包含描述这些常量的 nominal 信息。

JEP 340: One AArch64 Port, Not Two

只保留一个 AArch64 实现

在保留 32 位 ARM 实现和 64 位 aarch64 实现的同时,删除与 arm64 实现相关的所有源码。

JDK 中存在两套 64 位 ARM 实现,主要存在于 src/hotspot/cpu/arm 和 open/src/hotspot/cpu/aarch64 目录。两者都实现了 aarch64,现在将只保留后者,删除由 Oracle 提供的 arm64。这将使贡献者将他们的精力集中在单个 64 位 ARM 实现上,并消除维护两套实现所需的重复工作。

JEP 341: Default CDS Archives

默认类数据共享归档文件

针对 64 位平台,使用默认类列表增强 JDK 构建过程,以生成类数据共享(class data-sharing,CDS)归档。

JEP 344: Abortable Mixed Collections for G1

可中止的 G1 混合 GC

如果混合 GC 的 G1 存在超出暂停目标的可能性,则使其可中止。

JEP 346: Promptly Return Unused Committed Memory from G1

G1 及时返回未使用的已分配内存

增强 G1 GC,以便在空闲时自动将 Java 堆内存返回给操作系统。

为了实现向操作系统返回最大内存量的目标,G1 将在应用程序不活动期间定期执行或触发并发周期以确定整体 Java 堆使用情况。这将导致它自动将 Java 堆的未使用部分返回给操作系统。而在用户控制下,可以可选地执行完整的 GC,以使返回的内存量最大化。

上述每一个新特性都有详细的说明文档,点击「阅读原文」可以跳转查看。

JDK 13 还会远吗?

根据 JDK 13 的迭代计划,预计其将于 2019 年 9 月发布 —— Java 现在采取“半年发布一次版本”的模式。

对于 JDK 13 的新特性,Oracle Java 平台组首席架构师 Mark Reinhold 做出了两个预测:

  • 原生字符串文字(Raw String Literals),它可以跨多行源码而不对转义字符进行转义。目标是简化 Java 的开发,比如开发者可以可读形式表示字符序列,而不会掺杂一些 Java 指示符,或者提供针对 Java 以外的语法的字符串。在 JDK 13 中进行预期的测试运行后,该功能可以在随后的 JDK 14 版本中跟进。

  • 可用于生产环境的 switch 表达式,JDK 13 中将带来一个 beta 版本实现。switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。

可访问 http://openjdk.java.net/projects/jdk/13/ 查看 JDK 13 的相关信息。

讨论:开发者如何看待 Java 12?

留意到不少开发者对 Raw String Literals 特性情有独钟,该特性类似于 JavaScript ES6 语法中的模板字符串,使用它基本可以告别丑陋的字符串拼接(特性详见 http://openjdk.java.net/jeps/326)。

该特性原计划于 JDK 12 发布,可惜最后还是被取消了(不过可能会在 JDK 13 发布),详见:http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html。

可能是因为业界呼声太高,最近委员会又把这个特性拿出来重新讨论了:https://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000931.html。

你最想要的 JDK 特性是什么?欢迎在留言区和大家分享!

-END-

纯洁的微笑

一个有故事的程序员

Java 12 / JDK 12 正式发布相关推荐

  1. mint java_Oracle Java 12 (JDK 12)在Ubuntu、Linux Mint或Debian(使用PPA)安装配置

    使用apt命令在Ubuntu.Debian或Linux Mint中安装Oracle Java 12 1.添加Java PPA源并在Ubuntu或Linux Mint(64位)中安装Oracle Jav ...

  2. JDK 12:实际中的切换语句/表达式

    我的上一篇文章" 玩JDK 12的Switch表达式 "讨论了如何使用JDK 12 Early Access Builds尝试JEP 325 switch 表达式和语句,并提供了一 ...

  3. 还没用上 JDK 11吧,JDK 12 早期访问构建版使用

    JDK 更新速度快的飞起,JDK 12 早期访问构建版已发布,你现在用到了第几版本? 本周Java的最大新闻可能是JDK 11的正式发布.不过在 6 月底,JDK 11 就已经进入了 Rampdown ...

  4. JDK 11 马上就要来了!JDK 12 还会远吗?

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   JDK 11 发布时间马上到来,于此同时,JDK 12 发布时间也已确定 -- 2019年3月19日.是的,6个月之后又能迎来新版本了! 甲 ...

  5. Eclipse Jetty 9.4.15 发布,建议使用 JDK 12

    Eclipse Jetty 9.4.15 发布了,此版本包含大量的 bug 修复和改进,要点: Java 11 有一个有问题的 TLS 实现.目前 Jetty 团队建议使用 JDK 12,直到 JDK ...

  6. switch字符串jdk_从JDK 12删除原始字符串文字

    switch字符串jdk 已经提出从JDK 12中删除原始字符串文字(预览) (它将在12月13日进入Rampdown第一阶段 ). Brian Goetz撰写了删除此预览功能的动机的详细说明 ( J ...

  7. jdk 安全属性_系统属性的JDK 12 Javadoc标记

    jdk 安全属性 JDK 12 Early Access Build 20 ( 2018/11/15 )可用,可以用来试用新的Javadoc标签{@systemProperty} . 新的{@syst ...

  8. 精简jdk包_具有JDK 12精简数字格式的自定义精简数字模式

    精简jdk包 帖子" 紧凑数字格式出现在JDK 12中 "已经成为有关Java subreddit线程的讨论主题 . 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数 ...

  9. jdk12 switch_玩JDK 12的Switch表达式

    jdk12 switch 在博客文章"操作中的JDK语言功能预览:切换表达式 "中,我讨论了JEP 325 ["切换表达式( 预览 )")如何作为指定的&quo ...

最新文章

  1. thinkpad触控笔怎么用_电容笔怎么用,如何选择一支电容笔来提升生产力呢?
  2. C#.Net命名空间大纲
  3. HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
  4. jar包使用以及生成
  5. php 打印mysql错误日志_PHP error_log()函数处理错误日志
  6. 【答案放在最后,看题看不到答案】2017年下半年软件设计师 上午选择题
  7. C#各版本新增加功能
  8. 今天,我们就来抽个奖!
  9. js方式调用php_举例说明JS调用PHP和PHP调用JS的方法
  10. 对于一组给定的叶子结点_高糊图片可以做什么?Goodfellow等人用它生成一组合理图像...
  11. Jsoup实现java模拟登陆
  12. Solr常用查询语法笔记
  13. 学python有前途吗-Python全栈开发有前景吗,是否值得学习?
  14. 【每日算法Day 75】字节跳动面试题:手撕困难题,看过我Day 71的人都会做了!...
  15. 【更新】PDF控件Spire.PDF 3.9.568发布 | 附下载
  16. java并发编程实践之安全发布和逸出
  17. 辣椒app软件测试,testflight辣椒视频
  18. Win11怎么设置人离开后电脑自动锁屏?
  19. VMware新建虚拟机步骤图解
  20. STM32个人笔记--GPIO框图

热门文章

  1. 主板aspm关闭_华硕主板BIOS关闭secure boot和fastboot图解
  2. 【xlrd读取Excel日期】使用xlrd读取Excel日期格式单元格的方法
  3. java遍历json数据_Java 如何遍历JsonObject对象
  4. fsck的介绍和应用
  5. 清华计算机408考研真题资料经验分享
  6. department apartment
  7. 在自己的数据集上训练CrowdDet过程记录
  8. 记录一次前途迷茫的选择
  9. 【分享视频资源】React JS教程
  10. 淘客怎么利用抖音评论引流?