JDK10
新特性
课程介绍
1. 了解Java SE的发展历史
2. 了解Open JDK 和 Oracle JDK
3. JDK10新特性
局部变量类型推断
将
JDK 的多个代码仓库合并到一个储存库中
垃圾收集器接口
G1
引入并行 Full GC
应用程序类数据共享
线程
-局部变量管控
删除
JNI本地头文件生成工具(javah)
额外的
Unicode 语言标签扩展
在备用存储装置上的堆分配
基于
Java的实验性JIT编译器
根证书
基于时间的发行版本控制
新增
API
适合人群
在校大学生,学习过Java,渴望了解Java前沿技术的同学。
正在从事Java编程工作。
JDK10
新特性1-局部变量类型推断
目标
了解JDK10之前定义变量存在的问题
掌握JDK10局部变量类型推断的使用
掌握局部变量类型推断使用场景
了解局部变量类型推断不能使用场景
了解局部变量类型推断注意事项
JDK10之前定义变量存在的问题
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
很多人抱怨
Java是一种强类型,需要引入大量的样板代码。很明显类型声明往往被认为是不必要的。JDK10之前的
Java代码中,声明一个变量是非常繁琐的:
许多流行的编程语言都已经支持某种形式的局部变量类型推断,如JS(var)。
JDK10局部变量类型推断的使用
JDK10 可以使用 var 进行 局部变量类型推断。
局部变量类型推断使用场景
1. 局部变量
2. 循环内
局部变量类型推断不能使用场景
String
str = "abc";
long l = 10L;
boolean b = true;
ArrayList<String> list = new ArrayList();
Stream<String> stream = list.stream();
var
str = "abc"; // 推断为 字符串类型
var l = 10L; // 推断为long 类型
var flag = true; // 推断为 boolean 类型
var list = new ArrayList<String>(); // 推断为 ArrayList<String>
var stream = list.stream(); // 推断为 Stream<String>
public
class demo01var {
// var x = 10; // 成员变量不能使用var
public static void main(String[] args) {
var a = 1;
var str = "abc";
var flag = true;
var list = new ArrayList<String>();
list.add("aa");
var stream = list.stream();
for (var s : list) {
System.out.println(s);
}
for (var i = 0; i < 10; i++) {
var x = 5;
}
}
}
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
1
. 成员变量
2. 方法参数
3. 方法返回类型
局部变量类型推断注意事项
1. var
并不是一个关键字,可以作为标识符,这意味着可以将一个变量、方法、包名写成 var
。不过一般情况下
不会有人这么写的,因为这本身就违反了普遍的命名规范。
2. var
声明变量的时候必须赋值、不能用于声明多个变量的情况。
小结
我们了解了JDK10之前定义变量是比较繁琐的,通过JDK10的局部变量类型推断定义变量更加的简单。
如何进行局部变量类型推断?
什么情况下可以使用局部变量类型推断?
public
class demo01var {
// var x = 10; // 成员变量不能使用var
public static void main(String[] args) {
}
// 参数不能使用var
// public static void test01(var a) {}
/* 方法返回类型不能使用var
public static var test02() {
return true;
}*/
}
// var
并不是一个关键字,而是一个保留的类型名称,这意味着可以将一个变量、方法、包名写成 `var`。
public static void test03() {
var var = 10;
System.out.println("var = " + var);
}
// var
不能用来声明没有赋值的变量、不能用于声明多个变量的情况。
public static void test04() {
// var x = null; // 不行,推断不出到底是什么类型
int x = 1, y = 2; // 可以
// var m = 1, n = 2; // 不行
}
将变量名左边的类型替换成
var即可
var i = 3;
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
1
. 局部变量
2. 循环中的变量
JDK10
新特性2-将 JDK 的多个代码仓库合并到一个储存库中
目标
了解这个新特性
它是一项对JDK源码进行管理的方案,开发人员无法直接使用
该新特性的动机
多年以来,JDK的完整代码库已分解为许多的仓库中。在 JDK9 中,JDK的源码被分成有 8 个仓库: root、corba、
hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。JDK的源码分成多个仓库这种情况在支持各种所需的源代码管
理操作方面做得很差。特别是,不可能在相互依赖的变更集的存储库之间执行原子提交。例如,如果今天用于单个错
误修复或RFE的代码跨越了jdk和hotspot仓库,则无法在托管这两个不同仓库的目录林中原子地对两个仓库进行更
改。跨越多个存储库的更改是很常见的。
将 JDK 的多个代码仓库合并到一个储存库中的好处
在 JDK10 中这些将被合并为一个,使得跨相互依赖的变更集的存储库运行 atomic commit (原子提交)成为可能。
JDK10
新特性3-垃圾回收器接口
目标
了解这个新特性
这不是让开发者用来控制垃圾回收的接口,而是方便JDK的开发人员在JVM 源代码中快速的集成和移除垃圾回收器。
该新特性的动机
当前,垃圾回收器的代码分散,不方便新增新的垃圾回收器也不利于移除现有垃圾回收器。
通过引入一个干净的垃圾回收器(GC)接口来改善不同垃圾回收器的源代码隔离。
该新特性的目标
JVM
内部GC代码的更好的模块化
使在不影响当前代码库的情况下向
JVM添加新GC变得更加简单
使从
JVM构建中排除GC更容易
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
JDK10
新特性4-G1 引入并行 Full GC
目标
了解这个新特性
该新特性的动机
G1 是设计来作为一种低延时的垃圾回收器。G1收集器还可以进行非常精确地对停顿进行控制。从JDK7开始启用G1
垃圾回收器,在JDK9中G1成为默认垃圾回收策略。截止到ava 9,G1的Full GC采用的是单线程算法。也就是说G1在
发生Full GC时会严重影响性能。
该新特性的效果
JDK10又对G1进行了提升,G1 引入并行 Full GC算法,在发生Full GC时可以使用多个线程进行并行回收。能为用户
提供更好的体验。
JDK10
新特性5-应用程序类数据共享
目标
了解这个新特性
它是一项JVM性能增强功能,开发人员无法直接使用
该新特性的动机
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090