????????Java 10 于 2018 年 3 月發布,是 Java 平臺按照新的六個月發布周期發布的第一個版本。雖然相比 Java 8 和 Java 9 的大型更新,Java 10 的變化較小,但仍然引入了一些重要的特性,特別是本地變量類型推斷(var)?。
局部變量類型推斷
????????Java 10 最引人注目的特性是引入了 var
關鍵字,允許編譯器根據變量初始化表達式自動推斷局部變量的類型。這個特性使 Java 代碼更加簡潔,減少了冗余的類型聲明。
????????值得注意的是,雖然 var
看起來像動態類型,但 Java 依然是強類型語言。var
只是在編譯時由編譯器負責類型推斷,一旦推斷完成,變量的類型就固定了,在運行時不會改變。
var app="q123";//1.沒有初始化器的變量聲明
// var num ;
// var s = null;
// //2.lambda表示式中,左邊的函數式接口不能聲明為varSupplier<Double> sup = () -> Math.random();
// var sup = () -> Math.random();
// //3.方法引用中,左邊的函數式接口不能聲明為varConsumer<String> con = System.out::println;
// var con = System.out::println;
// //4.數組的靜態初始化中,注意如下的情況也不可以int[] arr = {1, 2, 3, 4};
// var arr = {1,2,3,4};// 捕獲表達式(catch)
// try{
//
// }catch(var e){
// e.printStackTrace();
// }//方法的返回類型
// public var method1(){
// return 0;
// }//方法的參數類型
// public void method2(var num){
//
// }
copyof()
自 Java 9 開始, Jdk 里面為集合(List / Set / Map) 都添加了 of (jdk9新增)和copyOf (jdk10新增)方法, 它們兩個都用來創建不可變的集合, 來看下它們的使用和區別。
static <E> List<E> copyOf(Collection<? extends E> coll) {if (coll instanceof ImmutableCollections.AbstractImmutableList) {return (List<E>)coll;} else {return (List<E>)List.of(coll.toArray());} }static <E> Set<E> copyOf(Collection<? extends E> coll) {if (coll instanceof ImmutableCollections.AbstractImmutableSet) {return (Set<E>)coll;} else {return (Set<E>)Set.of(new HashSet<>(coll).toArray());} }static <K, V> Map<K, V> copyOf(Map<? extends K, ? extends V> map) {if (map instanceof ImmutableCollections.AbstractImmutableMap) {return (Map<K,V>)map;} else {return (Map<K,V>)Map.ofEntries(map.entrySet().toArray(new Entry[0]));}
返回一個只讀集合,如果被復制的是只讀集合,返回它本身,如果不是創建一個只讀集合并返回
var map = Map.of("Java", "Python", "C", "C");var copyMap = Map.copyOf(map);System.out.println(map == copyMap); // truevar list = new ArrayList<String>();list.add("牛逼");var copyList = List.copyOf(list);System.out.println(copyList == list); // false
垃圾回收器
G1并行Full GC
????????G1垃圾收集器在jdk9中是默認的。G1垃圾收集器避免了任何完全的垃圾收集,但是當用于收集的并發線程不能足夠快地恢復內存時,用戶的體驗就會受到影響。
此更改通過使完全GC并行來改善G1最壞情況下的延遲。G1收集器的mark-sweep compact算法作為此更改的一部分被并行化,當用于收集的并發線程不能足夠快地恢復內存時,它將被觸發。
垃圾收集器接口
????????這個JEP是未來的變化。它通過引入一個通用的垃圾收集器接口來改進不同垃圾收集器的代碼隔離。
????????此更改為內部GC代碼提供了更好的模塊化。它將有助于將來添加新的GC而不改變現有的代碼基,也有助于刪除或管理以前的GC。