java 9 10 11 12 13新特性,这里为你总结全了

JAVA 9的新特性java模块系统 (Java Platform Module System) 。
模块系统的使用:
HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性 。
新的版本号格式:$MAJOR.$MINOR.$SECURITY.$PATCH
private instance methods:方法上可以使用@SafeVarargs注解 。

  1. diamond语法与匿名内部类结合使用 。
  2. 下划线_不能单独作为变量名使用 。
  3. 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用) 。
Javadoc
  • 简化Doclet API 。
  • 支持生成html5格式 。
  • 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语 。
  • 支持新的模块系统 。
JVM
  • 增强了Garbage-First(G1)并用它替代Parallel GC成为默认的垃圾收集器 。
  • 统一了JVM 日志,为所有组件引入了同一个日志系统 。
  • 删除了JDK 8中弃用的GC组合 。(DefNew + CMS,ParNew + SerialOld,Incremental CMS) 。
REPL (JShell):交互式编程环境 。
响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程 。
进程 API: 改进的 API 来控制和管理操作系统进程 。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境 。
改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询 。
 
Java 10的新特性说了这么多,看Java 10都会有哪些特性来改变我们写代码的方式呢?!
1. 局部变量类型推断
局部变量类型推断可以说是Java 10中最值得注意的特性,Java语言开发人员为了简化Java应用程序的编写而采取的又一步简化,如下图所示 。
//之前的代码格式URL url = new URL("http://www.oracle.com/"); URLConnection conn = url.openConnection(); Reader reader = new BufferedReader( new InputStreamReader(conn.getInputStream()))//java10中用var来声明变量var url = new URL("http://www.oracle.com/"); var conn = url.openConnection(); var reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验 。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺 。
局部变量类型推断将引入"var"关键字,也就是你可以随意定义变量而不必指定变量的类型,如:
将被下面这个新语法所取代:
看完是不是有点JS的即视感???越来越像JS了吗?!虽然类型推断在Java中不是一个新概念,但在局部变量中确是很大的一个改进 。
说到类型推断,从JDK 5引进泛型,到JDK 7的"<>"操作符允许不绑定类型而初始化List,再到JDK 8的Lambda表达式,再到现在JDK 10的局部变量类型推断,Java类型推断正大刀阔斧的向前发展 。
局部变量类型推荐仅限于如下使用场景:
  • 本地变量初始化 。
  • 增强for循环中 。
  • 传统for循环中声明的索引变量 。
  • Try-with-resources 变量 。?
Java官方表示,它不能用于以下几个地方:
  • 方法参数
  • 构造函数参数
  • 方法返回类型
  • 字段
  • try-catch表达式(或任何其他类型的变量声明)
2. GC改进和内存管理
JDK 10中有2个JEP专门用于改进当前的垃圾收集元素 。
第一个垃圾收集器接口是(JEP 304),它将引入一个纯净的垃圾收集器接口,以帮助改进不同垃圾收集器的源代码隔离 。
预定用于Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间 。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行 。
3. 线程本地握手(JEP 312)
JDK 10将引入一种在线程上执行回调的新方法,因此这将会很方便能停止单个线程而不是停止全部线程或者一个都不停 。
4. 备用内存设备上的堆分配(JEP 316)
允许HotSpot VM在备用内存设备上分配Java对象堆内存,该内存设备将由用户指定 。
5. 其他Unicode语言 - 标记扩展(JEP 314)
目标是增强java.util.Locale及其相关的API,以便实现语言标记语法的其他Unicode扩展(BCP 47) 。
6. 基于Java的实验性JIT编译器
Oracle希望将其Java JIT编译器Graal用作linux / x64平台上的实验性JIT编译器 。
7. 根证书(JEP 319)
这个的目标是在Oracle的Java SE中开源根证书 。


推荐阅读