最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Valhalla?Project項(xiàng)目介紹

 更新時(shí)間:2022年09月06日 14:40:08   作者:?sofia??  
這篇文章主要介紹了Java?Valhalla?Project項(xiàng)目介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言:

在本文中,我們將介紹Valhalla項(xiàng)目——它的歷史原因、當(dāng)前的開(kāi)發(fā)狀態(tài),以及它發(fā)布后為日常Java開(kāi)發(fā)人員帶來(lái)了什么。

Valhalla項(xiàng)目的動(dòng)機(jī)和原因

Oracle的Java語(yǔ)言架構(gòu)師Brian Goetz在一次演講中說(shuō),Valhalla項(xiàng)目的主要?jiǎng)訖C(jī)之一是希望使Java語(yǔ)言和運(yùn)行時(shí)適應(yīng)現(xiàn)代硬件。當(dāng)Java語(yǔ)言誕生時(shí)(大約25年前撰寫(xiě)本文時(shí)),獲取內(nèi)存和算術(shù)運(yùn)算的成本大致相同。

如今,這種情況已經(jīng)發(fā)生了變化,內(nèi)存提取操作的成本是算術(shù)操作的200到1000倍。就語(yǔ)言設(shè)計(jì)而言,這意味著導(dǎo)致指針提取的間接操作會(huì)對(duì)整體性能產(chǎn)生不利影響。

由于應(yīng)用程序中的大多數(shù)Java數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,因此我們可以將Java視為指針密集型語(yǔ)言(盡管我們通常不會(huì)直接看到或操作它們)。這種基于指針的對(duì)象實(shí)現(xiàn)用于啟用對(duì)象標(biāo)識(shí),對(duì)象標(biāo)識(shí)本身用于語(yǔ)言特性,如多態(tài)性、可變性和鎖定。默認(rèn)情況下,這些特性適用于每個(gè)對(duì)象,無(wú)論它們是否真的需要。

遵循導(dǎo)致指針的標(biāo)識(shí)鏈和導(dǎo)致間接的指針鏈,間接存在性能缺陷,邏輯上的結(jié)論是刪除那些不需要它們的數(shù)據(jù)結(jié)構(gòu)。這就是值類(lèi)型value types發(fā)揮作用的地方。

Value Types 值類(lèi)型

值類(lèi)型的概念是表示純數(shù)據(jù)聚合。這會(huì)刪除常規(guī)對(duì)象的功能。因此,我們有純數(shù)據(jù),沒(méi)有身份。當(dāng)然,這意味著我們也失去了使用對(duì)象標(biāo)識(shí)可以實(shí)現(xiàn)的功能。因此,平等比較只能基于狀態(tài)進(jìn)行。因此,我們不能使用表示多態(tài)性,也不能使用不可變或不可為空的對(duì)象。

由于我們不再有對(duì)象標(biāo)識(shí),我們可以放棄指針,改變值類(lèi)型的一般內(nèi)存布局,而不是對(duì)象。讓我們來(lái)比較一下類(lèi)點(diǎn)和相應(yīng)的值類(lèi)型點(diǎn)之間的內(nèi)存布局。

常規(guī)Point類(lèi)的代碼和相應(yīng)的內(nèi)存布局為:

final class Point {
  final int x;
  final int y;
}

另一方面,值類(lèi)型Point的代碼和相應(yīng)的內(nèi)存布局將是:

value class Point {
  int x;
  int y
}

這允許JVM將值類(lèi)型展平為數(shù)組和對(duì)象,以及其他值類(lèi)型。

在下圖中,我們展示了在數(shù)組中使用Point類(lèi)時(shí)間接的負(fù)面影響:

另一方面,這里我們看到值類(lèi)型Point[]的相應(yīng)內(nèi)存結(jié)構(gòu):

它還使JVM能夠在棧上傳遞值類(lèi)型,而不必在堆上分配它們。最后,這意味著我們得到的數(shù)據(jù)聚合具有類(lèi)似于Java原語(yǔ)的運(yùn)行時(shí)行為,如intfloat。

但與原語(yǔ)不同,值類(lèi)型可以有方法和字段。我們還可以實(shí)現(xiàn)接口并將其用作泛型類(lèi)型。

因此,我們可以從兩個(gè)不同的角度來(lái)看值類(lèi)型:

  • 更快的對(duì)象
  • 用戶定義原語(yǔ)

作為額外的錦上添花,我們可以使用值類(lèi)型作為泛型類(lèi)型,而無(wú)需裝箱。這直接將我們引向了另一個(gè)大型項(xiàng)目Valhalla的特性:專(zhuān)用泛型。

Specialized Generics 專(zhuān)用泛型

當(dāng)我們想對(duì)語(yǔ)言原語(yǔ)進(jìn)行泛化時(shí),我們目前使用裝箱類(lèi)型,例如整數(shù)表示Integer或浮點(diǎn)表示Float。這種裝箱創(chuàng)建了一個(gè)額外的間接層,從而首先破壞了使用原語(yǔ)提高性能的目的。

因此,我們?cè)诂F(xiàn)有的框架和庫(kù)中看到了許多針對(duì)基元類(lèi)型的專(zhuān)門(mén)化,如IntStream<T>ToIntFunction<T>。這樣做是為了保持使用原語(yǔ)的性能提高。

因此,專(zhuān)門(mén)化泛型是為了消除這些“黑客”的需求。相反,Java語(yǔ)言努力為基本上所有東西啟用泛型類(lèi)型:對(duì)象引用、原語(yǔ)、值類(lèi)型,甚至可能是void。

結(jié)論

我們初步了解了Valhalla項(xiàng)目將給Java語(yǔ)言帶來(lái)的變化。其中兩個(gè)主要目標(biāo)是提高性能和減少泄漏的抽象。

性能增強(qiáng)通過(guò)展平對(duì)象圖和移除間接來(lái)解決。這將導(dǎo)致更高效的內(nèi)存布局和更少的分配和垃圾回收。

當(dāng)用作泛型類(lèi)型時(shí),原語(yǔ)和對(duì)象具有更相似的行為,這是更好的抽象。

到此這篇關(guān)于Java Valhalla Project項(xiàng)目介紹的文章就介紹到這了,更多相關(guān)Java Valhalla Project內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

禄丰县| 保山市| 新蔡县| 桂东县| 图木舒克市| 濮阳县| 神木县| 玉林市| 高唐县| 泰宁县| 镇康县| 石家庄市| 桑植县| 庆城县| 蕲春县| 阳西县| 石棉县| 十堰市| 娄底市| 沾化县| 龙山县| 如皋市| 红桥区| 宝坻区| 巴彦淖尔市| 新干县| 敦化市| 建瓯市| 望谟县| 惠安县| 大埔区| 汉寿县| 灵丘县| 阳春市| 民勤县| 分宜县| 天祝| 汝州市| 峨眉山市| 龙井市| 牟定县|