Valhalla項目,TillValhalla
Valhalla項目的動機和原因
TillValhalla,在本文中,我們將介紹Valhalla項目——它的歷史原因、當前的開發狀態,以及它發布后為日常Java開發人員帶來了什么。
Valhalla項目的動機和原因
Oracle的Java語言架構師Brian Goetz在一次演講中說,Valhalla項目的主要動機之一是希望使Java語言和運行時適應現代硬件。當Java語言誕生時(大約25年前撰寫本文時),獲取內存和算術運算的成本大致相同。
如今,這種情況已經發生了變化,內存提取操作的成本是算術操作的200到1000倍。就語言設計而言,這意味著導致指針提取的間接操作會對整體性能產生不利影響。
發動機中置的頂級跑車Valhalla是帕爾默 讓阿斯頓?馬丁成為英國版法拉利的宏偉計劃的關鍵環節。 另外,據公司的幾位內部人士說,戰神Valkyrie和Valhalla這兩款限量生產的頂級跑車將無法帶來他們預期的收入。據報道,由紅牛車隊的奇才亞德里安。
遵循導致指針的標識鏈和導致間接的指針鏈,間接存在性能缺陷,邏輯上的結論是刪除那些不需要它們的數據結構。這就是值類型value types發揮作用的地方。
近日,阿斯頓·馬丁首席執行官慕容濤(Tobias Moers)表示,未來梅賽德斯-奔馳對阿斯頓·馬丁的持股將從2.3%提升至20%,因此未來品牌也將根據梅賽德斯-奔馳的電氣化的進程向著全面電動化的最終目標轉型。Valhalla 據計劃,阿斯頓·。
value types值類型
值類型的概念是表示純數據聚合。這會刪除常規對象的功能。因此,我們有純數據,沒有身份。當然,這意味著我們也失去了使用對象標識可以實現的功能。因此,平等比較只能基于狀態進行。因此,我們不能使用表示多態性,也不能使用不可變或不可為空的對象。
企業回EPQ項目建議選擇北京知路研修科技有限公司,價格合理,品質高服務好。北京知路研修科技有限公司以"專業品質,精益求精"為宗旨,以"以人為本、誠實守信"為經營理念,以"服務客戶、滿意客戶、提升客戶"為目標,產品以品質好,服務好贏得眾合作伙伴。
由于我們不再有對象標識,我們可以放棄指針,改變值類型的一般內存布局,而不是對象。讓我們來比較一下類點和相應的值類型點之間的內存布局。
常規Point類的代碼和相應的內存布局為:
final class Point {final int x;final int y;}
另一方面,值類型Point的代碼和相應的內存布局將是:
前AMG總裁兼阿斯頓·馬丁新首席執行官Tobias Moers稱:“阿斯頓·馬丁將與梅賽德斯-奔馳達成最新的技術協議,對Valhalla項目進行一些重大修改。新車發布時間或將推遲到2023年下半年,屆時阿斯頓·馬丁Valhalla將會使用全新的、令人驚嘆。
value class Point {int x;int y}
這允許JVM將值類型展平為數組和對象,以及其他值類型。在下圖中,我們展示了在數組中使用Point類時間接的負面影響:
另一方面,這里我們看到值類型 Point[] 的相應內存結構:
它還使JVM能夠在棧上傳遞值類型,而不必在堆上分配它們。最后,這意味著我們得到的數據聚合具有類似于Java原語的運行時行為,如 int 或 float 。
但與原語不同,值類型可以有方法和字段。我們還可以實現接口并將其用作泛型類型。因此,我們可以從兩個不同的角度來看值類型:
更快的對象
用戶定義原語
作為額外的錦上添花,我們可以使用值類型作為泛型類型,而 無需裝箱 。這直接將我們引向了另一個大型項目Valhalla的特性:專用泛型。
Specialized Generics 專用泛型
當我們想對語言原語進行泛化時,我們目前使用裝箱類型,例如整數表示 Integer 或浮點表示 Float 。這種裝箱創建了一個額外的間接層,從而首先破壞了使用原語提高性能的目的。
因此,我們在現有的框架和庫中看到了許多針對基元類型的專門化,如 IntStream<T> 或 ToIntFunction<T> 。這樣做是為了保持使用原語的性能提高。
結論
我們初步了解了Valhalla項目將給Java語言帶來的變化。其中兩個主要目標是提高性能和減少泄漏的抽象。
性能增強通過展平對象圖和移除間接來解決。這將導致更高效的內存布局和更少的分配和垃圾回收。
當用作泛型類型時,原語和對象具有更相似的行為,這是更好的抽象。
版權聲明:本站文章均來源于網絡,如有侵權請聯系刪除!