淺談JDK7和JDK8的區別在哪
一、接口中的default方法
一般來說接口中的方法都是不實現的,基本通過實現類來實現方法。但是jdk8中提供瞭一種被default修飾的方法,可以直接在接口中進行實現。
二、lambda表達式
jdk8引入瞭lambda表達式,也可稱為closure(閉包),通常是在需要一個函數,但又不想費神去命名一個函數的場合下使用,也就是指匿名函數。
lambda允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。
由於其幾乎被所有主流開發語言支持。是java8新引入的一種語法,是一種緊湊的傳遞代碼的方式。使用lambda表達式可以使代碼變的更加簡潔緊湊。
三、函數式接口
函數式接口的引入是為瞭函數式編程的,函數式編程往往依賴於lambda表達式。
定義函數式接口有兩個步驟:
1)確保接口中有且僅有一個抽象方法:
2)使用註解@FunctionalInterface修飾接口
四、StreamAPI
JDK8中引入瞭StreamAPI,對於學過Flink或Spark的學者應該對此比較熟悉,其實就是類似於一種流式的數據處理,從dataSource到中間的operator操作,再到最後的dataSink。
Stream的中間操作有map,filter等操作。而流式的數據處理往往就是通過函數式編程實現的。
五、移出永久代,元空間替換
JDK7使用永久代存儲類的元數據,JDK8使用元空間存儲類的元數據。元空間和永久代都是用來存儲class相關信息,包括class對象的Method,Field等,元空間和永久代其實都是方法區的實現,隻是實現有所不同,所以說方法區其實隻是一種JVM的規范。
區別:
兩者最大的區別是元空間使用本地內存,而永久代使用的是JVM的內存。
元空間優勢:
優勢就是元數據分配隻受本地內存大小的限制。本地內存剩餘多少理論上metaspace就可以有多大,這解決瞭空間不足的問題,不過也不可能任其無限壯大,JVM默認在運行時會根據需要動態的設置其大小
六、HashMap中的優化
1)增加紅黑樹
2)解決jdk1.7多線程下的死循環:
擴容使用尾插法,拋棄頭插法
3)rehash的優化:
jdk7擴容的rehash是重新計算桶的位置,而jdk8則進行瞭優化,不需要進行重新計算。
七、currentHashMap的優化
jdk7是使用分段鎖實現線程安全,jdk則使用sy關鍵字和大量的CAS操作實現。
到此這篇關於淺談JDK7和JDK8的區別在哪的文章就介紹到這瞭,更多相關JDK7和JDK8的區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java8新特性之Stream API詳解
- java.lang.OutOfMemoryError: Metaspace異常解決的方法
- 淺談HashMap中7種遍歷方式的性能分析
- 關於JavaEE匿名內部類和Lambda表達式的註意事項
- Java8 Lambda和Invokedynamic詳情