专业的JAVA编程教程与资源

网站首页 > java教程 正文

刚刚发布的Java 10带来了哪些新特性?都在这里了

temp10 2024-09-14 12:54:28 java教程 13 ℃ 0 评论

Oracle已经为Java设定了六个月一个大版本的发行计划,最新的Java 10也已于2018年3月20日发布了。今天我们就来看一看Java 10为我们带来的哪些重要特性。

刚刚发布的Java 10带来了哪些新特性?都在这里了

Java 10特性列表

局部变量类型推断:Local-Variable Type Inference

类似与Javascript、Kotlin、Scala这些编程语言,在Java 10中也添加了var关键字。var关键字允许在定义局部变量的时候不指定变量的类型,具体的类型可以在编译的时候推断出来。比如:

var name = "Java";

在编译的时候就可以知道name的类型是String的。

使用var只能定义局部变量,不能用来定义类的成员变量或者静态变量。同时var关键字并没有把java变成类似于Python那样动态类型语言。所以如下的代码是会报错的:

var name = "Java";

name = 1;

需要注意的是使用var来定义一个局部变量的时候,需要同时给它进行初始化,并且不能初始化为null(因为这个时候编译器无法判断变量的类型)。

var是一个上下文敏感的关键字,对于一些老代码升级使用Java 10需要注意如下问题:

  • 代码使用var作为一个变量、方法或包名称时将不受影响

  • 使用var作为类或接口名称的代码将受到影响。

全新的版本命名规则:Time-Based Release Versioning

在Java 10之前使用Java有一个大问题就是版本众多,而每一个版本的发布时间又无法从版本信息中直观的知道。到了Java 10采用了基于时间的版本发布计划,通过java --version出来的版本信息可以清除的知道当前版本的发布时间,这样就能够方便的知道当前版本有没有一些安全bug。

Java 9版本信息如下:

java -version

java version "9"

Java(TM) SE Runtime Environment (build 9+181)

Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

Java 10的版本信息如下:

java -version

openjdk version "10" 2018-03-20

OpenJDK Runtime Environment 18.3 (build 10+46)

OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

Java 10的版本格式:

$FEATURE.$INTERIM.$UPDATE.$PATCH

  • FEATURE主要是major版本号,比如10,每6个月新增1次,比如2018年9月发布的就是JDK11

  • INTERIM主要是minor版本号,在改为6个月发布一次之后,这个就固定为0,这里仍保留

  • UPDATE主要是security或bug相关fix的版本号,第一次递增在1个月后,之后每3月递增1次,比如2018年4月发布的就是JDK10.0.1,7月发布的就是JDK10.0.2

  • PATCH主要是紧急的一些修复版本

垃圾收集器接口:Garbage-Collector Interface

干净的GC接口将使实现新的收集器变得更容易,这将使代码更加清洁,并且在构建时可以更简单地排除一个或多个收集器。 添加一个新的垃圾收集器只需要一个实现一套完善的文档接口的问题,而不是搞清楚HotSpot中所有需要改变的地方。

G1的Full GC实现并行:Parallel Full GC for G1

在Java 9中G1已经是JVM默认的GC了,以前的默认并行收集器full gc是并行的,那么G1的收集也应该是并行的,所以在Java 10中G1被设计成了并行。

移除了javah工具:Remove the Native-Header Generation Tool(javah)

在Java 10中javah工具被从JDK中被移除了,javac对它进行替代。javah的功能是在编译的时候自动添加native的头文件。

线程本地握手:Thread-Local Handshakes

线程本地握手,不执行全局VM安全点也能对线程执行回调,同时实现单线程停止回调。利用所谓的非对称Dekker同步技术,通过与Java线程握手来消除一些内存障碍(memory barrier)。现在实现同步连内存屏障都不用了,直接使用了Dekker算法。

Java-BasedJIT编译器:Experimental Java-Based JIT Compiler

首先这是一个实验性质的特性(Experimental)。启用了基于Java的JIT编译器:Graal,并且在Linux/x64平台将它作为一个实验性质的JIT编译。

其实在Java 9中就已经Graal了,在Java 10中可以通过JVM参数来配置启用它:

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

结语

Java 10才刚刚正式发布,相信绝大部分人都没有在项目中使用过,很多人也没有了解过它的特性,本文也只是对Java 10中一些重要特性的简单介绍。欢迎关注,一起进步

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表