本文是个人在企业内部分享使用的简要大纲,列举了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<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }
demo:响应式编程
public CompletableFuture<String> 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<String> urls = List.of("http://www.baidu.com","http://www.alibaba.com/","http://www.tencent.com"); List<HttpRequest> requests = urls.stream() .map(url -> HttpRequest.newBuilder(URI.create(url))) .map(reqBuilder -> reqBuilder.build()) .collect(Collectors.toList()); List<CompletableFuture<HttpResponse<String>>> 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体验版.