美文网首页Java
闲话 JDK 13

闲话 JDK 13

作者: 码语生活 | 来源:发表于2019-07-26 22:41 被阅读1次

“听说没有,那个 Java 大叔又升级了他的武器,好像是叫 JDK 13 了?”路人甲在茶馆里跟圈子里的几个小伙伴边喝茶边吹水。

“我X,Java 大叔是要上天了吧,但是他能带着他的粉丝们飞吗?据我了解,他的粉丝们还用着他 5 年前赐给大众的 JDK 8 呢!” Storm 急着抢话了。

“我说 Storm 老哥,亏你之前还是用 Java 写过不少 APP 的大神呢,你怎么能不知道现在 Java 大叔就是每半年会升级一次他的武器的呢?他在今年 3 月份才刚发布了 JDK 12 啊,这么大的事情你居然会不了解?是不是最近自由了,不写代码后膨胀了?”路人甲抓住机会,赶紧抢白一翻这位好基友,要知道,平时路人甲总是被 Storm 在朋友圈里调侃啊。

“这......这......,我哪有膨胀了,只是最近确实忙着写文章,又要维护星球,这找上门来的广告商也确实有点多。” Storm 赶紧辩解,“呃,小甲,你还不了解我的时间表吗?这昨天才在这个茶馆里介绍了那个卖保险的孙总给你认识,你这小子不会这么快就忘了吧?别扯这些没用的了,快给我说说这次 Java 大叔的新武器有什么新特性吧!?” Storm 毕竟是曾经的技术大 V 啊,在技术的新动态上也不能显得太无知不是?

听 Storm 这么一说,路人甲感到不好意思了,便快快地赔不是,并开始介绍起 JDK 13 的新特性来了。

“说实话,自从我转投 Python 阵营之后,我对 Java 大叔的武器也不是很了解,毕竟他的武器更新换代太快了,只是最近刚好看到有文章写了 JDK 13,介绍了它的几个新特性。” 路人甲淡淡地喝了一口手中的绿茶,开始讲述了。

JDK 13 共有五大特性:

350:    Dynamic CDS Archives
351:    ZGC: Uncommit Unused Memory
353:    Reimplement the Legacy Socket API
354:    Switch Expressions (Preview)
355:    Text Blocks (Preview)

“第一个特性是 Dynamic CDS Archives,翻译过来就是【动态类数据共享归档】。”路人甲又笑嘻嘻地对 Storm 说:“哥,这个 CDS 估计你还没听说过吧?据说这是上个版本的特性了,可以让不同 Java 进程之间共享一份类元数据,减少内存占用,它还能加快应用的启动速度呢!而这次的这个动态 CDS ,就是希望增强 CDS 的使用,让应用在执行之后,动态地做类归档,使得一些在默认基础 CDS 上不包括的类也能动态地加进去。”

Storm 一听,这 CDS 确实是没听过啊,但他又不能显得自己太无知,就轻声说:“嗯,能共享减少内存占用,还能动态调整,这很灵活嘛。”

“第二个特性是 ZGC:Uncommit Unused Memory,这个特性就是在垃圾回收过程中,会把未使用的内存释放归还给操作系统。”路人甲接着说,“ZGC 是在 JDK 11 的时候提供的一个垃圾回收器,号称不管你开了多大的堆内存,它都能保证在 10 毫秒内释放 JVM ,不让它停顿在那。但是,当时的设计是它不能把内存归还给操作系统,而之前的 G1 回收器就已经实现了内存归还。对于比较关心内存占用的应用来说,肯定希望进程不要占用过多的内存空间了,所以这次增加了这个特性。”

“第三个特性是 Reimplement the Legacy Socket API,重新实现了古老的 Socket 接口。现在已有的 java.net.Socket 和 java.net.ServerSocket 以及它们的实现类,都可以回溯到 JDK 1.0 时代了。它们的实现是混合了 Java 和 C 的代码的,维护和调试都很痛苦。实现类还使用了线程栈作为 I/O 的缓冲,导致在某些情况下还需要增加线程栈的大小。而支持异步关闭的操作是通过使用一个本地的数据结构来实现的,这种方式这些年来也带来了潜在的不稳定性和跨平台移植问题。该实现还存在几个并发问题,需要彻底解决。在未来的网络世界,要快速响应,不能阻塞本地方法线程,当前的实现不适合使用了。全新实现的 NioSocketImpl 是 PlainSocketImpl 的替代。它便于维护和调试,与 NewI/O (NIO) 使用相同的 JDK 内部结构,因此不需要使用系统本地代码。它与现有的缓冲区缓存机制集成在一起,这样就不需要为 I/O 使用线程栈。它使用 java.util.concurrent 锁,而不是 synchronized 同步方法,增强了并发能力。”

“第四个特性是 Switch Expressions (Preview),switch 表达式,这个特性哥你肯定懂。”路人甲不忘提醒一下 Storm,“我们以前写 Java 代码,用 switch 语句的时候,不能作为表达式给变量赋值,还要记得在每个 case 分支里加上 break 关键字才行。而这次的 switch 表达式特性,就支持了把 switch 作为表达式语句,还能在每个 case 里省掉了 break 关键字。哥你看以下示例。”

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);
}


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

“看到了吧,这样写简洁多了。”路人甲兴奋地介绍说。

Storm 一看,心中一喜,笑着说:“这个语法我见过,Kotlin 家的 when 表达式就是这么干的!”

“哥不愧是 Android 大神啊,Google 力挺 Kotlin 作为 Android 第一开发语言,哥就掌握了 Kotlin 的语法精粹了。”路人甲赶紧拍了个马屁。

“你就别给我戴高帽了,还有第五个特性呢?” Storm 问道。

路人甲不敢怠慢,急忙介绍说:“这第五个特性嘛,想必哥也是很熟悉了,它叫 Text Blocks (Preview),文本块。这跟 Kotlin 里的文本块也是差不多,请看以下示例。”

HTML 示例
原有方式:
String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";
新特性方式:
String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

SQL 示例
原有方式:
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
               "WHERE `CITY` = 'INDIANAPOLIS'\n" +
               "ORDER BY `EMP_ID`, `LAST_NAME`;\n";

新特性方式:
String query = """
               SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
               WHERE `CITY` = 'INDIANAPOLIS'
               ORDER BY `EMP_ID`, `LAST_NAME`;
               """;

“是啊,这个新特性我喜欢,以前写代码不能让一行代码太长,字符串长了换行就要用加号拼接,很不直观,复制出来到别的地方使用还要把加号和引号去掉,太烦人了。想不到 Java 大叔到 JDK 13 才更新他的武器,给粉丝们提供便利啊。” Storm 感慨说。

“谁说不是呢,这些年很多 Java 粉丝已经讨厌写那些冗长难看的代码了,有些转投到高效的 Python 门下,有的转用 Kotlin,有的去了新兴的 Go 那边。不过,Java 大叔凭着其广阔的领土,活跃高效的运转机构,以及其开放改革的心,还会有不少的粉丝追随他的。”路人甲赶紧附和道。

“你们两个靠写文章吃饭的小子,今天怎么吹起写代码来了?那个,《极客时间》又出新专栏了,你们有没档期帮忙推广啊?”
路人甲和 Storm 抬头一看,池大来了。

参考
JDK 13 的项目页面
https://openjdk.java.net/projects/jdk/13/

作者语
以上人物场景均为本人杜撰。JDK 的新特性我确实是追不动了,现在还停留在 JDK 8 的世界里,大家如果对新技术感兴趣,还是进入官方项目页面看第一手信息吧。

相关文章

网友评论

    本文标题:闲话 JDK 13

    本文链接:https://www.haomeiwen.com/subject/ikmjrctx.html