资讯专栏INFORMATION COLUMN

JAVA9-12新特性简述

TigerChain / 3058人阅读

摘要:本文是个人在企业内部分享使用的简要大纲,列举了的重要更新,文章的结构较简单,也不规范,鉴于近期写若干文章时总会忘记一些新特性所处的版本,特将此大纲流留用。

本文是个人在企业内部分享使用的简要大纲,列举了JAVA9-12的重要更新,文章的结构较简单,也不规范,鉴于近期写若干文章时总会忘记一些新特性所处的版本,特将此大纲流copy留用。

一 JAVA9 新特性

1.Java Platform Module System/ Modular Java Application Packaging模块化系统及类加载器分级

2.jshell

3.Multi-Release JAR Files 多版本的jar包

4.Jlink 工具

5.Segmented Code Cache 代码片段缓存

6.Dynamic Linking of Language-Defined Object Models 动态链接语言定义模型

7.Unified JVM Logging 统一JVM日志

8.将G1作为默认垃圾收集器,并deprecated CMS.

9.进程API

10.变量句柄

11.字符串内部实现优化(字符数组变字节数组+编码方式)

12.发布订阅框架

13.集合工厂方法

14.自旋暗示

15.对象序列化数据过滤

16."栈旅行者"

17.Milling Project Coin(鬼知道该怎么翻译).

Allow @SafeVargs on private instance methods. //允许在私有实例方法上标注@SafeVargs注解

Allow effectively final variables to be used as resources in the try-with-resourcesstatement. //try-with-resource 语法支持实际final的变量

Allow the diamond with anonymous classes if the argument type of the inferred type is denotable.//允许对可推荐出类型的匿名内部类使用钻石符号.

Complete the removal, begun in Java SE 8, of the underscore from the set of legal identifier names.//移除java8中已经开始的,以下划线作为完整标识符名称

Add support for private interface methods.//接口中可定义私有方法.

18.扩大的unicode集

19.孵化官方http client.

二 JAVA10

1.局部变量类型推断

2.统一定义的 GC接口.

3.g1垃圾收集器的并行full gc

4.应用类数据共享

5.thread local 握手

6.扩展unicode语言标签.

三. JAVA11

1.unicode10支持

2.标准化java9中孵化的http客户端

demo:同步式编程

public void get(String uri) throws Exception {

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(uri))
            .build();
    HttpResponse response =
            client.send(request, HttpResponse.BodyHandlers.ofString());

    System.out.println(response.body());
}

demo:响应式编程

public CompletableFuture getCompletableFuture(String uri) {

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(uri))
            .build();

    return client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
            .thenApply(HttpResponse::body);
}

demo:响应式编程-并发

public void testConcurrentRequests(){

    HttpClient client = HttpClient.newHttpClient();
    List urls = List.of("http://www.baidu.com","http://www.alibaba.com/","http://www.tencent.com");
    List requests = urls.stream()
            .map(url -> HttpRequest.newBuilder(URI.create(url)))
            .map(reqBuilder -> reqBuilder.build())
            .collect(Collectors.toList());

    List>> futures = requests.stream()
            .map(request -> client.sendAsync(request, HttpResponse.BodyHandlers.ofString()))
            .collect(Collectors.toList());
    futures.stream()
            .forEach(e -> e.whenComplete((resp,err) -> {
                if(err != null){
                    err.printStackTrace();
                }else{
                    System.out.println(resp.body());
                    System.out.println(resp.statusCode());
                }
            }));
    CompletableFuture.allOf(futures
            .toArray(CompletableFuture[]::new))
            .join();
}

注:以上代码是分享时从网上转来的,因为此文是从内部wiki粘过来,出处已忘。接下来打算发一篇CompletableFuture有关的文章,最近对响应式编程的兴趣更加深刻了。

3.Collection.toArray(IntFunction) Default 方法

4.编译器线程的懒分配

5.体验版zgc大杀器(缺少类和元数据卸载)

6.Epsilon GC no-op 体验版

7.少代价的堆分析工具jvmti

8.nests, an access-control context ,省去编译器插入accessibility-broadening bridge methods

9.一些属性变事实的只读.java.home, user.home, user.dir, user.name等

10.Reference类不再支持克隆

11.使用classpath进行编译运行时,默认解析的模块策略变更:root模块集在此版本变更为所有可见的导出api的系统模块,唯一可见的改变是java.se模块不在默认解析.

12.SelectableChannel可以在select操作正在进行中注册.

13.DatagramChannel.send Throws AlreadyConnectedException Instead of IllegalArgumentException

14.为并发gc提供新的性能记数器

15.g1支持自适应的引用处理时的线程数.所有gc支持stw阶段的并行自适应.

16.模块路径下支持类数据共享cds.

四.JAVA12

1.unicode11支持

2.jvm常量api

3.简写的数字格式:1k

4.zgc支持并发类数据卸载

5.支持交替在内存设备上分配老年代,支持相应功能的设备如"非易变-双列直插式内存模型"(NV-DIMM).

6.switch case支持语句的同时支持表达式.case ... ->

7.更好的支持http重定向(HttpURLConnection)

8.g1可能在并发标记周期交回内存.

9可终止的g1混合gc

10.让g1在空闲时自动交回已提交但未使用的内存.

11.Shenandoah 低停顿gc体验版.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74962.html

相关文章

  • ForkJoin框架之CompletableFuture

    摘要:内部类,用于对和异常进行包装,从而保证对进行只有一次成功。是取消异常,转换后抛出。判断是否使用的线程池,在中持有该线程池的引用。 前言 近期作者对响应式编程越发感兴趣,在内部分享JAVA9-12新特性过程中,有两处特性让作者深感兴趣:1.JAVA9中的JEP266对并发编程工具的更新,包含发布订阅框架Flow和CompletableFuture加强,其中发布订阅框架以java.base...

    lindroid 评论0 收藏0
  • JAVA运行时简述(HotSpot)

    摘要:拆解虚拟机的基本步聚如下首先,要等待到自身成为唯一一个正在运行的非守护线程时,在整个等待过程中,虚拟机仍旧是可工作的。将相应的事件发送给,禁用,并终止信号线程。 本文简单介绍HotSpot虚拟机运行时子系统,内容来自不同的版本,因此可能会与最新版本之间(当前为JDK12)存在一些误差。 1.命令行参数处理HotSpot虚拟机中有大量的可影响性能的命令行属性,可根据他们的消费者进行简...

    hosition 评论0 收藏0
  • Apache和Spring提供的StopWatch执行时间监视器

    摘要:借助它来统计我们程序的执行时间,带给非常多的方便和优雅。且,且,且设置为了当前时间。 相关阅读 【小家java】java5新特性(简述十大新特性) 重要一跃【小家java】java6新特性(简述十大新特性) 鸡肋升级【小家java】java7新特性(简述八大新特性) 不温不火【小家java】java8新特性(简述十大新特性) 饱受赞誉【小家java】java9新特性(简述十大新特性) ...

    Genng 评论0 收藏0
  • 2019前端秋季社招面试经历总结(三年经验)

    摘要:经历月份开放的简历,收到了蛮多询问和面试,算是招人旺季,需要跳槽的小伙伴抓住机会。现在是面试了家公司左右,有些高频问题会标记次数总次数,可供大家参考。最后祝大家面试顺利,拿到心仪的,写错的地方请不吝赐教,谢谢。 经历 7月份开放的简历,收到了蛮多询问和面试,算是招人旺季,需要跳槽的小伙伴抓住机会。一开始广泛看面试题,没抓住重点复习,有很多平时也没怎么用到,导致一开始面试的时候,问的问题...

    Kross 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<