请选择 进入手机版 | 继续访问电脑版

你还在使用 JDK 7?JDK 13 都已经来了!五大新特性你最喜欢哪个 ?

[复制链接]
茂忠想你 发表于 2020-12-31 20:23:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
就在昨天(2019年09月17日),JDK 13 已经处于 General Availability 状态,已经正式可用了。General Availability(简称 GA)是一种正式版本的定名,也就是官方开始推荐广泛使用了,我们熟悉的 MySQL 就用 GA 来下令其正式版本。


从上图我们可以看到 JDK 13 带来了五个大的 Features:



  • 350: Dynamic CDS Archives
  • 351: ZGC: Uncommit Unused Memory
  • 353: Reimplement the Legacy Socket API
  • 354: Switch Expressions (Preview)
  •        355: Text Blocks (Preview)
       本文将领导各人来看看这五大特性。    350: Dynamic CDS Archives    这个特性是扩展 JEP310:Application Class-Data Sharing(简称AppCDS,拜见 http://openjdk.java.net/jeps/310)的,以允许在 Java 应用步调执行竣事时动态归档类,归档类扩展了默认的底子层 CDS (Class-Data Sharing)存档,此特性允许应用的类也可以被放置在共享的归档类(archived classes)文件中。

   JEP 350 的主要目的有两个:  

  • 提高 AppCDS 的可用性,不需要用户举行试运行来为每个应用步调创建类列表。
  • 由 -Xshare:dump 选项启用的静态归档(Static archiving)应该继承工作,这包罗用于内置类加载器和用户界说类加载器的类。

   用户可以指定动态存档名称的文件名作为 -XX:ArchiveClassesAtExit 选项的参数。  例如,下面的下令创建hello.jsa:    % bin/java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello      要使用此动态存档运行相同的应用步调:    % bin/java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello    351: ZGC: Uncommit Unused Memory    ZGC 是在 JDK 11 中引入的一个全新的垃圾收集器,它由 Oracle 开辟,允许在数 TB 的堆上具有非常低的暂停时间。  但到现在为止,它还没有像 G1 垃圾收集器那样将未使用的堆内存返回到操纵系统。  这个JEP办理了这个问题,默认情况下启用了这个功能。由于网上有一大堆 ZGC 的文章,所以本文禁绝备详细先容 ZGC了。  353: Reimplement the Legacy Socket API
       现在 JDK 的 java.net.Socket 和 java.net.ServerSocket 的实现非常古老,这个 JEP为它们引入了一个全新的实现。  Java 13 中的默认使用这个实现,但是旧的实现还没有删除,如果还需要,可以通过设置系统属性 jdk.net.usePlainSocketImpl 来使用它们。需要注意的是,并没有为 java.net.DatagramSocket 引入新的实现。    如果使用了新的 java.net.Socket 和 java.net.ServerSocket,在类中初始化 Socket 和 ServerSocket 将会显示出下面的调试信息:   

   上面调试信息输出的 sun.nio.ch.NioSocketImpl 就是新的实现。如果我们需要使用旧的 Socket 实现,可以使用 jdk.net.usePlainSocketImpl 系统属性,这时候调试信息将输出如下信息:  

   从上面信息可以看出,已经是用了旧的 java.net.PlainSocketImpl 实现。  354: Switch Expressions (Preview)
JDK 12 中引入了 Switch 表达式,此时还属于预览特性。JEP 354 修改了这个特性,它引入了 yield 语句,用于从块返回值,而不是使用 break。这意味着,switch表达式需要返回值的时候应该使用 yield, 而需要不返回值应该使用break。

注意,这个特性在早期版本是不能使用的。
355: Text Blocks (Preview)
JDK 12 中引入了原始字符串文字特性(http://openjdk.java.net/jeps/326),但在发布之前却被放弃了。JEP 355 在引入多行字符串文字(一个文本块)的意义上是雷同的。
   与 Python 雷同,可以界说多行文本块(而不是使用单行毗连),如下所示:  

     上面例子的 lines 变量内里内容第一个字符是 h,最后一个是字符 d,但是字符 d 背面还跟着一个换行符,所以上面 lines 的界说就相当于 String lines="hello iteblog\nhello word\n",如果 lines 字符串最后你不想要 \n,那么你需要这么写:  
  

这时候上面的界说就相当于 String lines="hello iteblog\nhello word",各人也可以看出,hello iteblog 和 hello word 字符串前后的空格全部被删除了。

最后,附上 Oracle Java SE Support Roadmap(https://www.oracle.com/technetwork/java/java-se-support-roadmap.html)可以看出 JDK 13 已经从 2019年09月开始可用了。


别的,是不是尚有许多小同伴和我一样还在使用 JDK 1.7\1.8 啊?真是坐飞机都赶不上这个社区的节奏。批评区谈谈你在使用的 JDK 版本。

本文主要参考 https://metebalci.com/blog/what-is-new-in-java-13/。


     
  新福利:
     从9月11日开始至10月15日停止,一共五周时间,每周二我会从公众号底部留言+转发+在看综合最多的读者中抽取一名读者,免费包邮送实体新书《HBase原理与实践》,留言互动起来吧~
   上周获奖名单:AF
   

   

   

   
      
                                                  猜你喜欢                              1、
        2、
        3、
        4、
                                                                                                                                
                                                   扫码关注我们
        过往影象大数据
        个人微信号:fangzhen0219
        拉你进技能交换群
        

来源:https://blog.csdn.net/b6ecl1k7BS8O/article/details/101013505
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )