网站首页 > java教程 正文
Oracle已经为Java设定了六个月一个大版本的发行计划,最新的Java 10也已于2018年3月20日发布了。今天我们就来看一看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中一些重要特性的简单介绍。欢迎关注,一起进步!
猜你喜欢
- 2024-09-14 Java十个亮点,简历脱颖而出!(java十个亮点,简历脱颖而出怎么写)
- 2024-09-14 「小马java」10、运算符(小马宝莉)
- 2024-09-14 Java开发10年,全记在这本Java程序员进阶宝典里了
- 2024-09-14 Java入门的10个知识点,看看你都会吗?
- 2024-09-14 java实现10种排序算法(java实现冒泡排序)
- 2024-09-14 10个Java开发人员的顶级测试工具、库和框架介绍
- 2024-09-14 Java语言中这10个功能,总被新手吐槽踩坑
- 2024-09-14 Java9/10新特性:集合增强(集合中元素的三个特性)
- 2024-09-14 Java路径-10-Java条件语句(java路径怎么找)
- 2024-09-14 解锁 java.io 类的 10+ 实用方法!用运动打通编程思路
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)