您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java Valhalla Project項目是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java Valhalla Project項目是什么”吧!
Oracle的Java語言架構(gòu)師Brian Goetz在一次演講中說,Valhalla項目的主要動機之一是希望使Java語言和運行時適應(yīng)現(xiàn)代硬件。當(dāng)Java語言誕生時(大約25年前撰寫本文時),獲取內(nèi)存和算術(shù)運算的成本大致相同。
如今,這種情況已經(jīng)發(fā)生了變化,內(nèi)存提取操作的成本是算術(shù)操作的200到1000倍。就語言設(shè)計而言,這意味著導(dǎo)致指針提取的間接操作會對整體性能產(chǎn)生不利影響。
由于應(yīng)用程序中的大多數(shù)Java數(shù)據(jù)結(jié)構(gòu)都是對象,因此我們可以將Java視為指針密集型語言(盡管我們通常不會直接看到或操作它們)。這種基于指針的對象實現(xiàn)用于啟用對象標識,對象標識本身用于語言特性,如多態(tài)性、可變性和鎖定。默認情況下,這些特性適用于每個對象,無論它們是否真的需要。
遵循導(dǎo)致指針的標識鏈和導(dǎo)致間接的指針鏈,間接存在性能缺陷,邏輯上的結(jié)論是刪除那些不需要它們的數(shù)據(jù)結(jié)構(gòu)。這就是值類型value types發(fā)揮作用的地方。
值類型的概念是表示純數(shù)據(jù)聚合。這會刪除常規(guī)對象的功能。因此,我們有純數(shù)據(jù),沒有身份。當(dāng)然,這意味著我們也失去了使用對象標識可以實現(xiàn)的功能。因此,平等比較只能基于狀態(tài)進行。因此,我們不能使用表示多態(tài)性,也不能使用不可變或不可為空的對象。
由于我們不再有對象標識,我們可以放棄指針,改變值類型的一般內(nèi)存布局,而不是對象。讓我們來比較一下類點和相應(yīng)的值類型點之間的內(nèi)存布局。
常規(guī)Point類的代碼和相應(yīng)的內(nèi)存布局為:
final class Point { final int x; final int y; }
另一方面,值類型Point的代碼和相應(yīng)的內(nèi)存布局將是:
value class Point { int x; int y }
這允許JVM將值類型展平為數(shù)組和對象,以及其他值類型。
在下圖中,我們展示了在數(shù)組中使用Point類時間接的負面影響:
另一方面,這里我們看到值類型Point[]
的相應(yīng)內(nèi)存結(jié)構(gòu):
它還使JVM能夠在棧上傳遞值類型,而不必在堆上分配它們。最后,這意味著我們得到的數(shù)據(jù)聚合具有類似于Java原語的運行時行為,如int
或float
。
但與原語不同,值類型可以有方法和字段。我們還可以實現(xiàn)接口并將其用作泛型類型。
因此,我們可以從兩個不同的角度來看值類型:
更快的對象
用戶定義原語
作為額外的錦上添花,我們可以使用值類型作為泛型類型,而無需裝箱。這直接將我們引向了另一個大型項目Valhalla的特性:專用泛型。
當(dāng)我們想對語言原語進行泛化時,我們目前使用裝箱類型,例如整數(shù)表示Integer
或浮點表示Float
。這種裝箱創(chuàng)建了一個額外的間接層,從而首先破壞了使用原語提高性能的目的。
因此,我們在現(xiàn)有的框架和庫中看到了許多針對基元類型的專門化,如IntStream<T>
或ToIntFunction<T>
。這樣做是為了保持使用原語的性能提高。
因此,專門化泛型是為了消除這些“黑客”的需求。相反,Java語言努力為基本上所有東西啟用泛型類型:對象引用、原語、值類型,甚至可能是void
。
感謝各位的閱讀,以上就是“Java Valhalla Project項目是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java Valhalla Project項目是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(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)容。