一起聊聊Java Valhalla Project項目
本篇文章為大家帶來了關於java的相關知識,其中主要介紹了Java Valhalla Project專案介紹,圍繞主題展開詳細的內容介紹,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
在本文中,我們將介紹Valhalla專案-它的歷史原因、目前的開發狀態,以及它發布後為日常Java開發人員帶來了什麼。
Valhalla專案的動機和原因
Oracle的Java語言架構師Brian Goetz在一次演講中說,Valhalla專案的主要動機之一是希望使Java語言和運行時適應現代硬件。當Java語言誕生時(大約25年前撰寫本文時),取得記憶體和算術運算的成本大致相同。
如今,這種情況已經發生了變化,記憶體提取操作的成本是算術操作的200到1000倍。就語言設計而言,這意味著導致指標提取的間接操作會對整體效能產生不利影響。
由於應用程式中的大多數Java資料結構都是對象,因此我們可以將Java視為指標密集型語言(儘管我們通常不會直接看到或操作它們) 。這種基於指標的物件實作用於啟用物件標識,物件標識本身用於語言特性,如多態性、可變性和鎖定。預設情況下,這些特性適用於每個對象,無論它們是否真的需要。
遵循導致指標的標識鍊和導致間接的指標鏈,間接存在效能缺陷,邏輯上的結論是刪除那些不需要它們的資料結構。這就是值類型value types發揮作用的地方。
Value Types 值類型
值類型的概念是表示純資料聚合。這會刪除常規物件的功能。因此,我們有純數據,沒有身分。當然,這意味著我們也失去了使用物件標識可以實現的功能。因此,平等比較只能基於狀態進行。因此,我們不能使用表示多態性,也不能使用不可變或不可為空的物件。
由於我們不再有物件標識,我們可以放棄指針,改變值類型的一般記憶體佈局,而不是物件。讓我們來比較一下類別點和對應的值類型點之間的記憶體佈局。
常規Point類別的程式碼和對應的記憶體佈局為:
final class Point { final int x; final int y; }
另一方面,值類型Point的程式碼和對應的記憶體佈局將是:
value class Point { int x; int y }
這允許JVM將值類型展平為陣列和對象,以及其他值類型。
在下圖中,我們展示了在陣列中使用Point類別時間接的負面影響:
Point[]的對應記憶體結構:
int或
float。
因此,我們可以從兩個不同的角度來看值類型:
- #更快的物件
- 使用者定義原語
無需裝箱。這直接將我們引向了另一個大型專案Valhalla的特性:專用泛型。
Specialized Generics 專用泛型當我們想要對語言原語進行泛化時,我們目前使用裝箱類型,例如整數表示Integer或浮點表示
Float。這種裝箱創造了一個額外的間接層,從而首先破壞了使用原語來提高性能的目的。
IntStream<T>或
ToIntFunction<T> 。這樣做是為了保持使用原語的性能提升。
void。
結論
我們初步了解了Valhalla專案將為Java語言帶來的改變。其中兩個主要目標是提高效能和減少洩漏的抽象化。
效能增強透過展平物件圖和移除間接來解決。這將導致更有效率的記憶體佈局和更少的分配和垃圾回收。
當用作泛型類型時,原語和物件具有更相似的行為,這是更好的抽象。
推薦學習:《java影片教學》
以上是一起聊聊Java Valhalla Project項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置
