什麼?JDK11發佈了?學不動了啊!

我知道你學不動了,但還是很平靜的告訴你,jdk11發佈了。沒錯,就是昨天,2018年9月25日,它,發佈了。

相信你之前已經在本號裏學到了不少JDK11的新特性,我們這個號的特點就是愛學習。

還是來宣佈一下JDK11新增的主要功能吧。

1、引入了ZGC(實驗性質)

這個真的很變態,好好看看鏈接中的內容ZGC回收器到底有多變態?

2、JDK11中增加了一個常量池類型:CONSTANT_Dynamic

3、Epsilon: 一個啥也不幹的垃圾收集器( No-Op Garbage Collector)

這個有什麼用呢?就是可以用來測試你的代碼。因爲根本不進行任何回收,所以你可以清楚的瞭解到你的代碼的內存佔用情況。可以用來做一些性能測試之類的。

4、HTTP Client (Standard)

這個HTTP Client在JDK9中就有了,只不過那會還是孵化階段(Incubating)。 HTTP Client採用了全新的設計,基於Reactive Streams 標準(Java 9 自帶了一個 Flow 接口,Copy了 Reactive Streams規範接口)。

5、告別Java EE和CORBA

發現沒?Java EE和CORBA被冷落了,大勢所趨。另外Nashorn也被棄用了。Nashorn是一個用java語言編寫的js引擎,聽聽是不是很酷,這個引擎於2011被髮布,如今要離我們而去了。

6、Fight Recorder

是一個全新的可以幫你跟蹤和分析java應用程序和hotspot jvm等的一個記錄儀。它內部把數據作爲事件,然後提供了一套api,可以用來produce和consumer數據(事件)的api。它提供了操作系統層面、hotspot jvm以及java庫的事件。並且還支持對這些事件進行配置和過濾。是不是很不錯。

7、支持啓動單文件源碼程序(Launch Single-File Source-Code Programs)

以後你可以不用先編譯(javac)再啓動(java)了,jdk11以後直接通過java Helloworld.java就可以啓動了。

8、var可以用到Lambda的參數裏了(Local-Variable Syntax for Lambda Parameters)。

在jdk10中你可以對局部變量使用var這種隱藏類型了,就像js一樣。

jdk11以後連lambda參數中也可以使用var了。

如下:

(var x, var y) -> x.process(y)

  或者乾脆省略掉var符號

(x, y) -> x.process(y)

9、低開銷的堆分析工具(Low-Overhead Heap Profiling)

現在不是已經開發出來很多的堆分析工具嘛。比如前面提到的Flight Recorder,以及常用的jmap、YourKit、VisualVM。

但他們都沒有直接告訴你出問題的具體位置,需要你自己去慢慢分析,現在這個Low-Overhead Heap Profiling希望給你提供一個直接定位到出事位置的工具。

這個工具內部提供了可擴展的JVMTI接口,該接口允許用戶自定義採樣(sampler)間隔,然後返回一組實時的堆棧跟蹤信息。

10、另外還新增了一些比較實用的方法。如下:

String

  1. lines 通過行分隔符獲取到數組。 "test\nhoge\n".lines().map(String::toUpperCase).toArray(); ==> Object[2] { "TEST", "HOGE" }
  2. repeat(int) 按照指定的次數重複字符串。 "test".repeat(3) ; ==> "testtesttest"
  3. isBlank() 判斷是否爲空 " ".isBlank(); ==> true
  4. strip()/stripLeading()/stripTrailing()j基本上和trim一樣,但空字符串判斷使用的是Character.isWhiteSpace(int) 。

Charactor

  1. toString(int) Character.toString(65); ==>"A"

Path

of(String, String...) 以前使用Paths.get()來獲取,現在我們可以像其他類一樣使用of了。

Files

  1. writeString(Path, CharSequence) 直接向指定文件寫入一個字符串。

Files.writeString(Path.of("test.txt"), "Hello!!!");

==> test.txt

b.readString(Path) 讀取一個字符串。

Files.readString(Path.of("test.txt"));

==>Hello!!!

Collection

a.toArray(IntFunction)

之前我們這樣轉list.toArray(new String[list.size())]),現在直接這樣轉:

List.of("aa","bb").toArray(String[]::new)

==> String[2] { "aa", "bb" }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章