JDK12 在2019/03/19终于与大家见面了,不同于JDK11,JDK12并不是一个LTS版本。作为一个中间版本,JDK12版本特性增加较少。
2017年宣布的加速发布节奏要求每六个月发布一次功能,每季度更新一次,每三年发布一次长期支持(LTS)更新版本(或每六个版本一次)。下一个LTS版本将是Java 17,计划于2021年9月发布。尽管 Java 11 才发布不久,但距离 Java 12 的发布也就剩下不到四个月的时间。
因此JDK12 并不适合作为生产环境升级版本,但JDK12带来的一些令人激动的新特性,同样值得我们关注。

特性列表

189: Shenandoah: 短暂停垃圾回收器 (实验)
230: Microbenchmark Suite: Microbenchmark组件
325: Switch Expressions (Preview) : 选择表达式(预览)
334: JVM Constants API: JVM常量API
340: One AArch64 Port, Not Two:只保留一个 AArch64 实现
341: Default CDS Archives:默认CDS档案
344: Abortable Mixed Collections for G1:G1 混杂集合区可抛弃
346: Promptly Return Unused Committed Memory from G1:G1快速返回未使用的承诺内存

Shenandoah: 短暂停垃圾回收算法

Shenandoah是jdk12一个新的垃圾回收算法。通过与运行的Java线程并行工作来减少GC暂停时间。使用Shenandoah的暂停时间与堆大小无关,这意味着无论堆是200 MB还是200 GB,都将具有相同暂停时间。
Shenandoah适用于高吞吐和大内存场景,不适合高实时性场景。Shenandoah算法设计目标主要是响应性和一致可控的短暂停顿,对于垃圾回收生命周期中安全点停顿(TTSP)和内存增长监控的时间开销并无帮助。
现代计算机相较过去拥有了更大的内存和更多的处理器,根据服务水平协议(Service Level Agreement, SLA),应用的响应时间应该保证在50ms到500ms。为了实现实现目标下限,理想情况是通过并行回收算法,不停顿或停顿时间在ms内进行回收。
Shenandoah算法为每个Java对象添加了一个间接指针,使得GC线程能够在Java线程运行时压缩堆。标记和压缩是同时执行的,因此我们只需要暂停Java线程在一致可控的时间内扫描线程堆栈以查找和更新对象图的根。

更多
Shenandoah: An open-source concurrent compacting garbage collector for OpenJDK
OpenJDK Shenandoah

Switch Expressions

正如在《JDK 11主要特性一览》中的预测一样,java在向scala不断学习中。
按在JEP 325中的说法,break的流程控制是一种低级的做法,括弧这里点名道姓的说了c/c++, (:/斜眼笑)

switch (day) {case MONDAY:case TUESDAY:int temp = ...break;case WEDNESDAY:case THURSDAY:int temp2 = ...     // Why can't I call this temp?break;default:int temp3 = ...     // Why can't I call this temp?
}

那么如何使用一种比较高级的做法呢?熟悉scala的小伙伴一定不会陌生,通过->实现域界定,对于并且 -> 右边表达式是是一个独立的域,域中的变量为局部变量,因此不存在上文出现的temp2、temp3这样的问题。这里可以通过,可以匹配多个标签。

switch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY                -> System.out.println(7);case THURSDAY, SATURDAY     -> System.out.println(8);case WEDNESDAY              -> System.out.println(9);
}

赋值方面,switch表达式使用break控制时通过临时变量来赋值

int numLetters;
switch (day) {case MONDAY:case FRIDAY:case SUNDAY:numLetters = 6;break;case TUESDAY:numLetters = 7;break;case THURSDAY:case SATURDAY:numLetters = 8;break;case WEDNESDAY:numLetters = 9;break;default:throw new IllegalStateException("Wat: " + day);
}

而新switch语句中使用了更贴近函数式的方案,直接将->右域内最后一行作为赋值语句。

int numLetters = switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY                -> 7;case THURSDAY, SATURDAY     -> 8;case WEDNESDAY              -> 9;
};

不足之处在于java中目前还未提供类似于scala case class的类型系统,pattern match在java中的使用还仅限于基本类型、String、枚举类型。相信在未来java应该会引入scala 中case class类似关键字,此时pattern match的优势会被进一步发挥。

JDK 12主要特性一览相关推荐

  1. JDK 11主要特性一览

    JDK 11主要特性一览 jdk11即将在9月25号发布正式版.确定的新特性包括以下17个 181 嵌套类可见性控制 309 动态文件常量 315 改进 Aarch64 Intrinsics 318 ...

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

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

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

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

  4. jdk安装教程_在JDK 12精简数字格式中使用最小分数数字

    jdk安装教程 帖子"紧凑数字格式出现在JDK 12中"演示了对JDK 12中NumberFormat的支持,以支持紧凑数字格式. 该帖子中显示的示例仅使用NumberFormat ...

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

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

  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中 "演示了对JDK 12中 NumberFormat的支持,以支持紧凑数字格式 . 该帖子中显示的示例仅使用NumberFor ...

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

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

最新文章

  1. 大道至简:软件工程实践者的思想——第七、八章感想
  2. 了解JavaScript
  3. Linux 无法使用su
  4. python request post json_python接口之request测试:以json格式发送post请求,.json方法,查看响应结果的情况...
  5. Linq中的Where与SkipWhile
  6. visual studio C语言指针提示:使用未初始化的内存xx
  7. 谷歌浏览器chrome的vuejs devtools 插件的安装
  8. CUBA平台–新的Java企业应用程序框架
  9. struct sk_buff与struct socket及struct sock 结构体分析
  10. 按键精灵定义全局变量_按键精灵中如何定义和使用变量
  11. 架构师的职责都有哪些?
  12. 影视】100种说爱你的方式~
  13. C++ primer 练习题
  14. Windows环境下安装JDK、JRE和环境变量配置,详细的图文教程
  15. grads 风向杆值大小
  16. sql循环语句在update中的应用
  17. 想要一款iOS矢量绘图编程软件?推荐来了
  18. mac/windows用Chrome浏览器截取长图
  19. cpu计算机性能指标有哪些,CPU性能指标有哪些
  20. 翻炒《天龙八部》[转]

热门文章

  1. JDK自带工具keytool生成ssl证书
  2. 北京航空航天大学2006年硕士研究生考试参考书目——ChinaKaoyan_com
  3. 国内做SRM系统的公司哪家比较好?
  4. 怎么将视频转成gif格式?手把手教你转换方法
  5. UdacityAS(1)--生日贺卡
  6. CSS+HTML实现3D图片旋转效果
  7. android 呼吸灯动画,更加自然的渐变——呼吸动画
  8. Spring Cloud中使用Consul作为服务注册中心时如何获得local service id?
  9. Python基础知识:if语句
  10. 我的 Chrome extensions 之 淘宝手机站助手