溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JDK7和JDK8的區(qū)別有哪些

發(fā)布時間:2021-06-03 15:02:14 來源:億速云 閱讀:315 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下JDK7和JDK8的區(qū)別有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、接口中的default方法

一般來說接口中的方法都是不實現(xiàn)的,基本通過實現(xiàn)類來實現(xiàn)方法。但是jdk8中提供了一種被default修飾的方法,可以直接在接口中進行實現(xiàn)。

二、lambda表達式

jdk8引入了lambda表達式,也可稱為closure(閉包),通常是在需要一個函數(shù),但又不想費神去命名一個函數(shù)的場合下使用,也就是指匿名函數(shù)。
lambda允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)。

由于其幾乎被所有主流開發(fā)語言支持。是java8新引入的一種語法,是一種緊湊的傳遞代碼的方式。使用lambda表達式可以使代碼變的更加簡潔緊湊。

三、函數(shù)式接口

函數(shù)式接口的引入是為了函數(shù)式編程的,函數(shù)式編程往往依賴于lambda表達式。

定義函數(shù)式接口有兩個步驟:

1)確保接口中有且僅有一個抽象方法:
2)使用注解@FunctionalInterface修飾接口

四、StreamAPI

JDK8中引入了StreamAPI,對于學過Flink或Spark的學者應(yīng)該對此比較熟悉,其實就是類似于一種流式的數(shù)據(jù)處理,從dataSource到中間的operator操作,再到最后的dataSink。

Stream的中間操作有map,filter等操作。而流式的數(shù)據(jù)處理往往就是通過函數(shù)式編程實現(xiàn)的。

JDK7和JDK8的區(qū)別有哪些

五、移出永久代,元空間替換

JDK7使用永久代存儲類的元數(shù)據(jù),JDK8使用元空間存儲類的元數(shù)據(jù)。元空間和永久代都是用來存儲class相關(guān)信息,包括class對象的Method,F(xiàn)ield等,元空間和永久代其實都是方法區(qū)的實現(xiàn),只是實現(xiàn)有所不同,所以說方法區(qū)其實只是一種JVM的規(guī)范。

區(qū)別:

兩者最大的區(qū)別是元空間使用本地內(nèi)存,而永久代使用的是JVM的內(nèi)存。

元空間優(yōu)勢:

優(yōu)勢就是元數(shù)據(jù)分配只受本地內(nèi)存大小的限制。本地內(nèi)存剩余多少理論上metaspace就可以有多大,這解決了空間不足的問題,不過也不可能任其無限壯大,JVM默認在運行時會根據(jù)需要動態(tài)的設(shè)置其大小

六、HashMap中的優(yōu)化

1)增加紅黑樹

2)解決jdk1.7多線程下的死循環(huán):

擴容使用尾插法,拋棄頭插法

3)rehash的優(yōu)化:

jdk7擴容的rehash是重新計算桶的位置,而jdk8則進行了優(yōu)化,不需要進行重新計算。

七、currentHashMap的優(yōu)化

jdk7是使用分段鎖實現(xiàn)線程安全,jdk則使用sy關(guān)鍵字和大量的CAS操作實現(xiàn)。

以上是“JDK7和JDK8的區(qū)別有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI