Local-Variable Type Inference 局部变量类型推断
JDK10 可以使用var作为局部变量类型推断标识符,仅适用于局部变量。
var str = "ABC"; //根据推断为 字符串类型
var l = 10L;//根据10L 推断long 类型
var flag = true;//根据 true推断 boolean 类型
var flag1 = 1;//这里会推断boolean类型。0表示false 非0表示true
var list = new ArrayList<String>(); // 推断 ArrayList<String>
var stream = list.stream(); // 推断 Stream<String>
反编译class文件后
String str = "ABC";
long l = 10L;
boolean flag = true;
int flag1 = true;
ArrayList<String> list = new ArrayList();
Stream<String> stream = list.stream();
适合var使用的场景
- 带有初始化程序的局部变量
//可以应用于直接初始化的局部变量
var numbers = List.of(1, 2, 3, 4, 5);
//错误的用法
var error;//×
- for循环,增强for循环索引
- for循环内部的局部变量
for (var number : numbers) {
System.out.println(number);
}
for (var i = 0; i < numbers.size(); i++) {
System.out.println(numbers.get(i));
}
var不能使用的场景
- 方法参数
- 构造函数参数
- 方法返回类型
- 成员变量
- 捕获表达式(catch)
标识符var不是关键字,它是一个保留的类型名称。这意味可以使用var用作变量,方法名或者包名;但var不能作为类或则接口的名字(但这样命名也不常见,因为他违反了类和接口首字母应该大写的命名约定)。
//可以使用var作为局部变量的名称
var var = 5;
//可以使用var作为方法的名称
public static void var() { // syntactically correct
}
//可以使用var作为包名
package var;
JDK这么做的原因也是考虑到兼容的问题,兼容有些老系统使用了var作为变量名。
不用担心使用var会影响代码阅读,在鼠标放到由var声明的变量上时,IDEA会显示它真实的类型。
Parallel Full GC for G1 为G1添加并行full GC的特性
在JDK9中G1被选定为默认的垃圾收集器,G1的设计目标是避免发生Full GC,由于Full GC较难产生所以在设计之初只有Young GC和Mixed GC是并行的,而Full GC是单线程使用标记-清理-合并算法进行垃圾回收。G1只是避免发生Full GC,在极端情况下,当G1的回收速度相对于产生垃圾的速度不是足够快时,就会发生Full GC。为了减小发生Full GC时对用户的影响,在JDK10中添加了G1垃圾收集器并行Full GC。
线程的数量可以由-XX:ParallelGCThreads选项来控制,这个参数也用来控制Young GC和Mixed GC的线程数。
Thread-Local Handshakes 线程局部管控
这是在 JVM 内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。
ZGC依赖这个功能
其他
基于 Java 的 JIT 编译器(实验性)在JDK17中被移除
完整JDK10新特性
286: Local-Variable Type Inference
296: Consolidate the JDK Forest into a Single Repository
304: Garbage-Collector Interface
307: Parallel Full GC for G1
310: Application Class-Data Sharing
312: Thread-Local Handshakes
313: Remove the Native-Header Generation Tool (javah)
314: Additional Unicode Language-Tag Extensions
316: Heap Allocation on Alternative Memory Devices
317: Experimental Java-Based JIT Compiler
319: Root Certificates
322: Time-Based Release Versioning
今天的文章jdk 新特性_jdk1.9的新特性有哪些分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69121.html