JDK11新特性詳解-創(chuàng)新互聯(lián)

1、增強(qiáng)局部變量類型推斷var
Consumer<String> consumer = t -> System.out.println(t.toUpperCase());
Consumer<String> consumer = (var t) -> System.out.println(t.toUpperCase());
錯(cuò)誤的形式:必須要有類型,可以加上var
Consumer<String> consumer = (@Deprecated t) ->System.out.println(t.toUpperCase())
正確的形式
Consumer<String> consumer = (@Deprecated var t) ->System.out.println(t.toUpperCase())

福安網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),福安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為福安成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的福安做網(wǎng)站的公司定做!
2、增加一些實(shí)用的API

       自JDK9和JDK10都為java增加了許多的API,如今JDK11又增加了許多字符串自帶方法,如下

@Test
public void contextLoads() {
    String str = "woshidage";
    boolean isblank = str.isBlank();  //判斷字符串是空白
    boolean isempty = str.isEmpty();  //判斷字符串是否為空
    String  result1 = str.strip();    //首位空白
    String  result2 = str.stripTrailing();  //去除尾部空白
    String  result3 = str.stripLeading();  //去除首部空白
    String  copyStr = str.repeat(2);  //復(fù)制幾遍字符串
    long  lineCount = str.lines().count();  //行數(shù)統(tǒng)計(jì)
    System.out.println(isblank);
    System.out.println(isempty);
    System.out.println(result1);
    System.out.println(result2);
    System.out.println(result3);
    System.out.println(copyStr);
    System.out.println(lineCount);
}

       結(jié)果為:

JDK11新特性詳解

3、移除和廢棄的內(nèi)容

      3.1 移除項(xiàng)

1、移除了com.sun.awt.AWTUtilities
2、移除了sun.misc.Unsafe.defineClass,使用java.lang.invoke.MethodHandles.Lookup.defineClass來替代
3、移除了Thread.destroy()以及 Thread.stop(Throwable)方法
4、移除了sun.nio.ch.disableSystemWideOverlappingFileLockCheck、sun.locale.formatasdefault屬性
5、移除了jdk.snmp模塊
6、移除了javafx,openjdk估計(jì)是從java10版本就移除了,oracle jdk10還尚未移除javafx,而java11版本則oracle的jdk版本也移除了javafx
7、移除了Java Mission Control,從JDK中移除之后,需要自己?jiǎn)为?dú)下載
8、移除了這些Root Certificates :Baltimore Cybertrust Code Signing CA,SECOM ,AOL and Swisscom

      3.2 廢棄項(xiàng)

1、-XX+AggressiveOpts選項(xiàng)
2、-XX:+UnlockCommercialFeatures
3、-XX:+LogCommercialFeatures選項(xiàng)也不再需要

4、HttpClient加強(qiáng)方法

      現(xiàn)在 Java 自帶了這個(gè) HTTP Client API,我們以后還有必要用 Apache 的 HttpClient 工具包嗎?

      4.1 需要遠(yuǎn)程調(diào)用的接口

@RequestMapping(value = "/dshjbca")
public String test1(){
    return "dfs";
}

      4.2 HttpClient調(diào)用該接口

//同步調(diào)用
@Test
public void test2() throws IOException, InterruptedException {
    HttpClient client             = HttpClient.newHttpClient();
    HttpRequest request           = HttpRequest.newBuilder(URI.create("")).build();
    BodyHandler<String>  handler  = HttpResponse.BodyHandlers.ofString();
    HttpResponse<String> response = client.send(request,handler);
    String body                   = response.body();
    System.out.println(body);
}
//異步調(diào)用
@Test
public void test3() throws IOException, InterruptedException, ExecutionException {
    HttpClient client             = HttpClient.newHttpClient();
    HttpRequest request           = HttpRequest.newBuilder(URI.create("")).build();
    BodyHandler<String>  handler  = HttpResponse.BodyHandlers.ofString();
    CompletableFuture<HttpResponse<String>> response = client.sendAsync(request,handler);
    HttpResponse<String> result   = response.get();
    String body                   = result.body();
    System.out.println(body);
}

      結(jié)果:

JDK11新特性詳解

5、Unicode 10

      Unicode 10 增加了 8518 個(gè)字符 ,  總計(jì)達(dá)到了 136690 個(gè)字符 .  并且增加了 4 個(gè)腳本 . 同時(shí)還有 56 個(gè)新的 emoji 表情符號(hào)。

6、Remove the JavaEE and CORBA Moudles

      在java11中移除了不太使用的JavaEE模塊和CORBA技術(shù),在java11中將java9標(biāo)記廢棄的Java EE及CORBA模塊移除掉。

1、java.xml.ws,
2、java.xml.bind,
3、java.xml.ws,
4、java.xml.ws.annotation,
5、jdk.xml.bind,
6、jdk.xml.ws被移除,
    只剩下java.xml,java.xml.crypto,jdk.xml.dom這幾個(gè)模塊
7、java.corba,
8、java.se.ee,
9、java.activation,
10、java.transaction被移除,但是java11新增一個(gè)java.transaction.xa模塊

7、JEP : 335 : Deprecate the Nashorn JavaScript Engine

      廢除Nashorn javascript引擎,在后續(xù)版本準(zhǔn)備移除掉,有需要的可以考慮使用GraalVM。

8、JEP : 336 : Deprecate the Pack200 Tools and API

      Java5中帶了一個(gè)壓縮工具:Pack200,這個(gè)工具能對(duì)普通的jar文件進(jìn)行高效壓縮。其  實(shí)現(xiàn)原理是根據(jù)Java類特有的結(jié)構(gòu),合并常數(shù)  池,去掉無(wú)用信息等來實(shí)現(xiàn)對(duì)java類的高效壓縮。由于是專門對(duì)Java類進(jìn)行壓縮的,所以對(duì)普通文件的壓縮和普通壓縮軟件沒有什么兩樣,但是對(duì)于Jar  文件卻能輕易達(dá)到10-40%的壓縮率。這在Java應(yīng)用部署中很有用,尤其對(duì)于移動(dòng)Java計(jì)算,能夠大大減小代碼下載量。

      Java5中還提供了這一技術(shù)的API接口,你可以將其嵌入到你的程序中使用。使用的方法很簡(jiǎn)單,下面的短短幾行代碼即可以實(shí)現(xiàn)jar的壓縮和解壓:

壓縮

Packer packer=Pack200.newPacker();
OutputStream output=new BufferedOutputStream(new  FileOutputStream(outfile));
packer.pack(new JarFile(jarFile), output);
output.close();

解壓

Unpacker unpacker=Pack200.newUnpacker();
output=new JarOutputStream(new FileOutputStream(jarFile));
unpacker.unpack(pack200File, output);
output.close();

      Pack200的壓縮和解壓縮速度是比較快的,而且壓縮率也是很驚人的,在我是使用  的包4.46MB壓縮后成了1.44MB(0.322%),而且隨著包的越大壓縮率會(huì)根據(jù)明顯,據(jù)說如果jar包都是class類可以壓縮到1/9的大  小。其實(shí)JavaWebStart還有很多功能,例如可以按不同的jar包進(jìn)行l(wèi)azy下載和 單獨(dú)更新,設(shè)置可以根據(jù)jar中的類變動(dòng)進(jìn)行class粒度的下載。但是在java11中廢除了pack200以及unpack200工具以及java.util.jar中的Pack200 API。因?yàn)镻ack200主要是用來壓縮jar包的工具,由于網(wǎng)絡(luò)下載速度的提升以及java9引入模塊化系統(tǒng)之后不再依賴Pack200,因此這個(gè)版本將其移除掉。

9、新的Epsilon垃圾收集器

      A NoOp Garbage Collector JDK上對(duì)這個(gè)特性的描述是: 開發(fā)一個(gè)處理內(nèi)存分配但不實(shí)現(xiàn)任何實(shí)際內(nèi)存回收機(jī)制的GC, 一旦可用堆內(nèi)存用完, JVM就會(huì)退出.

如果有System.gc()調(diào)用, 實(shí)際上什么也不會(huì)發(fā)生(這種場(chǎng)景下和-XX:+DisableExplicitGC效果一樣), 因?yàn)闆]有內(nèi)存回收, 這個(gè)實(shí)現(xiàn)可能會(huì)警告用戶嘗試強(qiáng)制GC是徒勞.

       用法 : -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

      選項(xiàng)-XX:+UseEpsilonGC, 程序很快就因?yàn)槎芽臻g不足而退出

      原因 : 提供完全被動(dòng)的GC 實(shí)現(xiàn) ,  具有有限的分配限制和盡可能低的延遲開銷 , 但代價(jià)是內(nèi)存占用和內(nèi)存吞吐量 , java 實(shí)現(xiàn)可廣泛選擇高度可配置的 GC 實(shí)現(xiàn) .  各種可用的收集器最終滿足不同的需求 ,  即使它們的可配置性使它們的功能相交 .  有時(shí)更容易維護(hù)單獨(dú)的實(shí)現(xiàn) ,  而不是在現(xiàn)有 GC 實(shí)現(xiàn)上堆積另一個(gè)配置選項(xiàng) .

主要用途如下 :

1、性能測(cè)試(它可以幫助過濾掉GC引起的性能假象)2、內(nèi)存壓力測(cè)試(例如,知道測(cè)試用例 應(yīng)該分配不超過1GB的內(nèi)存, 我們可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有問題, 則程序會(huì)崩潰)3、非常短的JOB任務(wù)(對(duì)象這種任務(wù), 接受GC清理堆那都是浪費(fèi)空間)4、VM接口測(cè)試5、Last-drop 延遲&吞吐改進(jìn)

10、ZGC

ZGC, 這應(yīng)該是JDK11最為矚目的特性, 沒有之一. 但是后面帶了Experimental, 說明這還不建議用到生產(chǎn)環(huán)境。    GC暫停時(shí)間不會(huì)超過10ms,既能處理幾百兆的小堆, 也能處理幾個(gè)T的大堆(OMG),和G1相比, 應(yīng)用吞吐能力不會(huì)下降超過15%,為未來的GC功能和利用colord指針以及Load barriers優(yōu)化奠定基礎(chǔ),初始只支持64位系統(tǒng)    ZGC的設(shè)計(jì)目標(biāo)是:支持TB級(jí)內(nèi)存容量,暫停時(shí)間低(<10ms),對(duì)整個(gè)程序吞吐量的影響小于15%。 將來還可以擴(kuò)展實(shí)現(xiàn)機(jī)制,以支持不少令人興奮的功能,例如多層堆(即熱對(duì)象置于DRAM和冷對(duì)象置于NVMe閃存),或壓縮堆。    GC是java主要優(yōu)勢(shì)之一,當(dāng)GC停頓太長(zhǎng), 就會(huì)開始影響應(yīng)用的響應(yīng)時(shí)間.消除或者減少GC停頓時(shí)長(zhǎng), java將對(duì)更廣泛的應(yīng)用場(chǎng)景是一個(gè)更有吸引力的平臺(tái). 此外, 現(xiàn)代系統(tǒng)中可用內(nèi)存不斷增長(zhǎng),用戶和程序員希望JVM能夠以高效的方式充分利用這些內(nèi)存, 并且無(wú)需長(zhǎng)時(shí)間的GC暫停時(shí)間

      用法 : -XX:+UnlockExperimentalVMOptions –XX:+UseZGC, 因?yàn)閆GC還處于實(shí)驗(yàn)階段, 所以需要通過JVM參數(shù)來解鎖這個(gè)特性

11、完全支持Linux容器(包括Docker)

      許多運(yùn)行在Java虛擬機(jī)中的應(yīng)用程序(包括Apache Spark和Kafka等數(shù)據(jù)服務(wù)以及傳統(tǒng)的企業(yè)應(yīng)用程序)都可以在Docker容器中運(yùn)行。但是在Docker容器中運(yùn)行Java應(yīng)用程序一直存在一個(gè)問題,那就是在容器中運(yùn)行JVM程序在設(shè)置內(nèi)存大小和CPU使用率后,會(huì)導(dǎo)致應(yīng)用程序的性能下降。這是因?yàn)镴ava應(yīng)用程序沒有意識(shí)到它正在容器中運(yùn)行。隨著Java 10的發(fā)布,這個(gè)問題總算得以解決,JVM現(xiàn)在可以識(shí)別由容器控制組(cgroups)設(shè)置的約束??梢栽谌萜髦惺褂脙?nèi)存和CPU約束來直接管理Java應(yīng)用程序,其中包括:

遵守容器中設(shè)置的內(nèi)存限制
在容器中設(shè)置可用的CPU
在容器中設(shè)置CPU約束
Java 10的這個(gè)改進(jìn)在Docker for Mac、Docker for Windows以及Docker Enterprise Edition等環(huán)境均有效。
容器的內(nèi)存限制
在Java 9之前,JVM無(wú)法識(shí)別容器使用標(biāo)志設(shè)置的內(nèi)存限制和CPU限制。而在Java 10中,內(nèi)存限制會(huì)自動(dòng)被識(shí)別并強(qiáng)制執(zhí)行。Java將服務(wù)器類機(jī)定義為具有2個(gè)CPU和2GB內(nèi)存,以及默認(rèn)堆大小為物理內(nèi)存的1/4。

12、支持G1上的并行完全垃圾收集

      對(duì)于 G1 GC ,相比于  JDK 8 ,升級(jí)到  JDK 11  即可免費(fèi)享受到:并行的  Full GC ,快速的  CardTable  掃描,自適應(yīng)的堆占用比例調(diào)整( IHOP ),在并發(fā)標(biāo)記階段的類型卸載等等。這些都是針對(duì)  G1  的不斷增強(qiáng),其中串行  Full GC  等甚至是曾經(jīng)被廣泛詬病的短板,你會(huì)發(fā)現(xiàn)  GC  配置和調(diào)優(yōu)在  JDK11  中越來越方便。

網(wǎng)頁(yè)名稱:JDK11新特性詳解-創(chuàng)新互聯(lián)
鏈接URL:http://bm7419.com/article34/dsspse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、微信小程序、微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)