国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java12的新特性

liujs / 3183人閱讀

摘要:的這個特性新增了兩個參數分別是及,設置為的話,表示禁用。語法層面引入了版本的層面引入了,引入,讓支持,對等新增方法方面引入了版本的,不過的沒有另外主要對及進行了改進其中對支持了,默認是開啟,使用可以禁用對于則新增支持以及特性

Java語言特性系列

Java5的新特性

Java6的新特性

Java7的新特性

Java8的新特性

Java9的新特性

Java10的新特性

Java11的新特性

Java12的新特性

Java13的新特性

本文主要講述一下Java12的新特性

版本號
java -version
openjdk version "12" 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode)
從version信息可以看出是build 12+33
特性列表

189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)

Shenandoah GC是一個面向low-pause-time的垃圾收集器,它最初由Red Hat實現,支持aarch64及amd64 architecture;ZGC也是面向low-pause-time的垃圾收集器,不過ZGC是基于colored pointers來實現,而Shenandoah GC是基于brooks pointers來實現;如果要使用Shenandoah GC需要編譯時--with-jvm-features選項帶有shenandoahgc,然后啟動時使用-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC

230: Microbenchmark Suite

在jdk源碼里頭新增了一套基礎的microbenchmarks suite

325: Switch Expressions (Preview)

對switch進行了增強,除了使用statement還可以使用expression,比如原來的寫法如下:
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        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;
};

對于需要返回值的switch expression要么正常返回值要么拋出異常,以下這兩種寫法都是錯誤的

int i = switch (day) {
    case MONDAY -> {
        System.out.println("Monday"); 
        // ERROR! Block doesn"t contain a break with value
    }
    default -> 1;
};
i = switch (day) {
    case MONDAY, TUESDAY, WEDNESDAY: 
        break 0;
    default: 
        System.out.println("Second half of the week");
        // ERROR! Group doesn"t contain a break with value
};

334: JVM Constants API

新增了JVM Constants API,具體來說就是java.base模塊新增了java.lang.constant包,引入了ConstantDesc接口(ClassDesc、MethodTypeDesc、MethodHandleDesc這幾個接口直接繼承了ConstantDesc接口)以及Constable接口;ConstantDesc接口定義了resolveConstantDesc方法,Constable接口定義了describeConstable方法;String、Integer、Long、Float、Double均實現了這兩個接口,而EnumDesc實現了ConstantDesc接口

340: One AArch64 Port, Not Two

64-bit Arm platform (arm64),也可以稱之為aarch64;之前JDK有兩個關于aarch64的實現,分別是src/hotspot/cpu/arm以及open/src/hotspot/cpu/aarch64,它們的實現重復了,為了集中精力更好地實現aarch64,該特性在源碼中刪除了open/src/hotspot/cpu/arm中關于64-bit的實現,保留其中32-bit的實現,于是open/src/hotspot/cpu/aarch64部分就成了64-bit ARM architecture的默認實現

341: Default CDS Archives

java10的新特性JEP 310: Application Class-Data Sharing擴展了JDK5引入的Class-Data Sharing,支持application的Class-Data Sharing;Class-Data Sharing可以用于多個JVM共享class,提升啟動速度,最早只支持system classes及serial GC,JDK9對其進行擴展以支持application classes及其他GC算法,并在JDK10中開源出來(以前是commercial feature);JDK11將-Xshare:off改為默認-Xshare:auto,以更加方便使用CDS特性;JDK12的這個特性即在64-bit平臺上編譯jdk的時候就默認在${JAVA_HOME}/lib/server目錄下生成一份名為classes.jsa的默認archive文件(大概有18M)方便大家使用

344: Abortable Mixed Collections for G1

G1在garbage collection的時候,一旦確定了collection set(CSet)開始垃圾收集這個過程是without stopping的,當collection set過大的時候,此時的STW時間會過長超出目標pause time,這種情況在mixed collections時候比較明顯。這個特性啟動了一個機制,當選擇了一個比較大的collection set,允許將其分為mandatory及optional兩部分(當完成mandatory的部分,如果還有剩余時間則會去處理optional部分)來將mixed collections從without stopping變為abortable,以更好滿足指定pause time的目標

346: Promptly Return Unused Committed Memory from G1

G1目前只有在full GC或者concurrent cycle的時候才會歸還內存,由于這兩個場景都是G1極力避免的,因此在大多數場景下可能不會及時會還committed Java heap memory給操作系統。JDK12的這個特性新增了兩個參數分別是G1PeriodicGCInterval及G1PeriodicGCSystemLoadThreshold,設置為0的話,表示禁用。當上一次garbage collection pause過去G1PeriodicGCInterval(milliseconds)時間之后,如果getloadavg()(one-minute)低于G1PeriodicGCSystemLoadThreshold指定的閾值,則觸發full GC或者concurrent GC(如果開啟G1PeriodicGCInvokesConcurrent),GC之后Java heap size會被重寫調整,然后多余的內存將會歸還給操作系統
細項解讀

上面列出的是大方面的特性,除此之外還有一些api的更新及廢棄,主要見JDK 12 Release Notes,這里舉幾個例子。

添加項

支持unicode 11

支持Compact Number Formatting

使用實例如下
    @Test
    public void testCompactNumberFormat(){
        var cnf = NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT);
        System.out.println(cnf.format(1_0000));
        System.out.println(cnf.format(1_9200));
        System.out.println(cnf.format(1_000_000));
        System.out.println(cnf.format(1L << 30));
        System.out.println(cnf.format(1L << 40));
        System.out.println(cnf.format(1L << 50));
    }

輸出

1萬
2萬
100萬
11億
1兆
1126兆

String支持transform、indent操作

    @Test
    public void testStringTransform(){
        System.out.println("hello".transform(new Function() {
            @Override
            public Integer apply(String s) {
                return s.hashCode();
            }
        }));
    }

    @Test
    public void testStringIndent(){
        System.out.println("hello".indent(3));
    }

Files新增mismatch方法

    @Test
    public void testFilesMismatch() throws IOException {
        FileWriter fileWriter = new FileWriter("/tmp/a.txt");
        fileWriter.write("a");
        fileWriter.write("b");
        fileWriter.write("c");
        fileWriter.close();

        FileWriter fileWriterB = new FileWriter("/tmp/b.txt");
        fileWriterB.write("a");
        fileWriterB.write("1");
        fileWriterB.write("c");
        fileWriterB.close();

        System.out.println(Files.mismatch(Path.of("/tmp/a.txt"),Path.of("/tmp/b.txt")));
    }

Collectors新增teeing方法用于聚合兩個downstream的結果

    @Test
    public void testCollectorTeeing(){
        var result = Stream.of("Devoxx","Voxxed Days","Code One","Basel One")
                .collect(Collectors.teeing(Collectors.filtering(n -> n.contains("xx"),Collectors.toList()),
                                            Collectors.filtering(n -> n.endsWith("One"),Collectors.toList()),
                        (List list1, List list2) -> List.of(list1,list2)
                                            ));

        System.out.println(result.get(0));
        System.out.println(result.get(1));
    }

CompletionStage新增exceptionallyAsync、exceptionallyCompose、exceptionallyComposeAsync方法

    @Test
    public void testExceptionallyAsync() throws ExecutionException, InterruptedException {
        LOGGER.info("begin");
        int result = CompletableFuture.supplyAsync(() -> {
            LOGGER.info("calculate");
            int i = 1/0;
            return 100;
        }).exceptionallyAsync((t) -> {
            LOGGER.info("error error:{}",t.getMessage());
            return 0;
        }).get();

        LOGGER.info("result:{}",result);
    }

JDK12之前CompletionStage只有一個exceptionally,該方法體在主線程執行,JDK12新增了exceptionallyAsync、exceptionallyComposeAsync方法允許方法體在異步線程執行,同時新增了exceptionallyCompose方法支持在exceptionally的時候構建新的CompletionStage

Allocation of Old Generation of Java Heap on Alternate Memory Devices

G1及Parallel GC引入experimental特性,允許將old generation分配在諸如NV-DIMM memory的alternative memory device

ZGC: Concurrent Class Unloading

ZGC在JDK11的時候還不支持class unloading,JDK12對ZGC支持了Concurrent Class Unloading,默認是開啟,使用-XX:-ClassUnloading可以禁用

新增-XX:+ExtensiveErrorReports

-XX:+ExtensiveErrorReports可以用于在jvm crash的時候收集更多的報告信息到hs_err.log文件中,product builds中默認是關閉的,要開啟的話,需要自己添加-XX:+ExtensiveErrorReports參數

新增安全相關的改進

支持java.security.manager系統屬性,當設置為disallow的時候,則不使用SecurityManager以提升性能,如果此時調用System.setSecurityManager則會拋出UnsupportedOperationException
keytool新增-groupname選項允許在生成key pair的時候指定一個named group
新增PKCS12 KeyStore配置屬性用于自定義PKCS12 keystores的生成
Java Flight Recorder新增了security-related的event
支持ChaCha20 and Poly1305 TLS Cipher Suites

jdeps Reports Transitive Dependences

jdeps的--print-module-deps, --list-deps, 以及--list-reduce-deps選項得到增強,新增--no-recursive用于non-transitive的依賴分析,--ignore-missing-deps用于suppress missing dependence errors
移除項

移除com.sun.awt.SecurityWarnin

移除FileInputStream、FileOutputStream、Java.util.ZipFile/Inflator/Deflator的finalize方法

移除GTE CyberTrust Global Root

移除javac的-source, -target對6及1.6的支持,同時移除--release選項

廢棄項

廢棄的API列表見deprecated-list

廢棄-XX:+/-MonitorInUseLists選項

廢棄Default Keytool的-keyalg值

已知問題

Swing不支持GTK+ 3.20及以后的版本

在使用JVMCI Compiler(比如Graal)的時候,JVMTI的can_pop_frame及can_force_early_return的capabilities是被禁用的

其他事項

如果用戶沒有指定user.timezone且從操作系統獲取的為空,那么user.timezone屬性的初始值為空變為null

java.net.URLPermission的行為發生輕微變化,以前它會忽略url中的query及fragment部分,這次改動新增query及fragment部分,即scheme : // authority [ / path ]變動為scheme : // authority [ / path ] [ ignored-query-or-fragment ]

javax.net.ssl.SSLContext API及Java Security Standard Algorithm Names規范移除了必須實現TLSv1及TLSv1.1的規定

小結

java12不是LTS(Long-Term Support)版本(oracle版本才有LTS),oracle對該版本的support周期為6個月。這個版本主要有幾個更新點,一個是語法層更新,一個是API層面的更新,另外主要是GC方面的更新。

語法層面引入了preview版本的Switch Expressions;API層面引入了JVM Constants API,引入CompactNumberFormat,讓NumberFormat支持COMPACTSTYLE,對String、Files、Collectors、CompletionStage等新增方法;GC方面引入了experimental版本的Shenandoah GC,不過oracle build的openjdk沒有enable Shenandoah GC support;另外主要對ZGC及G1 GC進行了改進

其中JDK12對ZGC支持了Concurrent Class Unloading,默認是開啟,使用-XX:-ClassUnloading可以禁用;對于G1 GC則新增支持Abortable Mixed Collections以及Promptly Return Unused Committed Memory特性

doc

openjdk 12

JDK 12 Release Notes

Java 12 Released with Experimental Switch Expressions and Shenandoah GC

Definitive Guide To Java 12

Definitive Guide To Switch Expressions In Java 12

JVM Class Data Sharing

JEP 310: Application Class-Data Sharing

Improve Launch Times On Java 10 With Application Class-Data Sharing

Make -Xshare:auto the default for server VM

Using application class-data sharing

Java Performance Tuning News February 2018

JDK 12 Security Enhancements

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73813.html

相關文章

  • Java8的新特性

    摘要:語言特性系列的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性序本文主要講的新特性,也是一個重要的版本,在語法層面有更大的改動,支持了表達式,影響堪比的泛型支持。 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13...

    xi4oh4o 評論0 收藏0
  • Java6的新特性

    摘要:語言特性系列的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性的新特性序本文梳理了下的新特性,相對于而言,的特性顯得少些,分量也不那么重,相當于是,有點像。 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序...

    leeon 評論0 收藏0
  • Java9的新特性

    摘要:新特性概述系列一安裝及使用系列二運行系列三模塊系統精要系列四更新系列五系列六系列七系列八系列九與的區別遷移注意事項參數遷移相關選項解析使用構建實例使用示例帶你提前了解中的新特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...

    ddongjian0000 評論0 收藏0
  • SpreadJS 純前端表格控件 V12.2 發布更新

    摘要:用不到行代碼,在前端實現的全部功能千萬前端開發者翹首企盼,終發布更新六大功能特性,帶來更多便利,用不到行代碼,在前端實現的全部功能是一款基于的純前端電子表格控件,以高速低耗高度類似可無限擴展為產品特色,提供移動跨平臺和瀏覽器支持,同時滿足等 用不到100行代碼,在前端實現Excel的全部功能 千萬前端開發者翹首企盼,SpreadJS V12.2 終發布更新:六大功能特性,帶來更多便利,...

    FrozenMap 評論0 收藏0
  • Java11的新特性

    摘要:從版本開始,不再單獨發布或者版本了,有需要的可以自己通過去定制官方解讀官方細項解讀穩步推進系列六的小試牛刀一文讀懂的為何如此高效棄用引擎 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要講述一下Java11的新...

    April 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<