欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言:

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

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

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

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

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

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

Value Types 值類型

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

由于我們不再有對象標(biāo)識(shí),我們可以放棄指針,改變值類型的一般內(nèi)存布局,而不是對象。讓我們來比較一下類點(diǎn)和相應(yīng)的值類型點(diǎn)之間的內(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類時(shí)間接的負(fù)面影響:

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

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

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

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

  • 更快的對象
  • 用戶定義原語

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

Specialized Generics 專用泛型

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

因此,我們在現(xiàn)有的框架和庫中看到了許多針對基元類型的專門化,如IntStream<T>ToIntFunction<T>。這樣做是為了保持使用原語的性能提高。

因此,專門化泛型是為了消除這些“黑客”的需求。相反,Java語言努力為基本上所有東西啟用泛型類型:對象引用、原語、值類型,甚至可能是void

結(jié)論

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

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

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

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

相關(guān)文章

  • SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式

    SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring boot項(xiàng)目集成Camel FTP的方法示例

    Spring boot項(xiàng)目集成Camel FTP的方法示例

    這篇文章主要介紹了Spring boot項(xiàng)目集成Camel FTP的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    這篇文章給大家分享了Java實(shí)現(xiàn)SHA1加密的相關(guān)實(shí)例代碼,有興趣的朋友可以測試參考下。
    2018-07-07
  • java學(xué)習(xí)筆記之eclipse+tomcat 配置

    java學(xué)習(xí)筆記之eclipse+tomcat 配置

    俗話說:工欲善其事必先利其器,既然要學(xué)習(xí)java,首先把java的開發(fā)環(huán)境搗鼓一下吧,這里我們來談?wù)別clipse+tomcat的配置方法。
    2014-11-11
  • maven插件spring-boot-starter-tomcat的使用方式

    maven插件spring-boot-starter-tomcat的使用方式

    這篇文章主要介紹了maven插件spring-boot-starter-tomcat的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java并發(fā)編程中的ReentrantLock類詳解

    Java并發(fā)編程中的ReentrantLock類詳解

    這篇文章主要介紹了Java并發(fā)編程中的ReentrantLock類詳解,ReentrantLock是juc.locks包中的一個(gè)獨(dú)占式可重入鎖,相比synchronized,它可以創(chuàng)建多個(gè)條件等待隊(duì)列,還支持公平/非公平鎖、可中斷、超時(shí)、輪詢等特性,需要的朋友可以參考下
    2023-12-12
  • SpringBoot中FailureAnalyzer的使用詳解

    SpringBoot中FailureAnalyzer的使用詳解

    這篇文章主要介紹了SpringBoot中FailureAnalyzer的使用詳解,FailureAnalyzer攔截啟動(dòng)時(shí)異常,將異常轉(zhuǎn)換成更加易讀的信息并包裝成org.springframework.boot.diagnostics.FailureAnalysis對象,監(jiān)控應(yīng)用啟動(dòng)過程,需要的朋友可以參考下
    2023-12-12
  • 在Spring使用iBatis及配置講解

    在Spring使用iBatis及配置講解

    今天小編就為大家分享一篇關(guān)于在Spring使用iBatis及配置講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • SpringBoot+thymeleaf+Echarts+Mysql 實(shí)現(xiàn)數(shù)據(jù)可視化讀取的示例

    SpringBoot+thymeleaf+Echarts+Mysql 實(shí)現(xiàn)數(shù)據(jù)可視化讀取的示例

    本文主要介紹了SpringBoot+thymeleaf+Echarts+Mysql 實(shí)現(xiàn)數(shù)據(jù)可視化讀取的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 詳解JAVA高質(zhì)量代碼之?dāng)?shù)組與集合

    詳解JAVA高質(zhì)量代碼之?dāng)?shù)組與集合

      在學(xué)習(xí)編程的過程中,我覺得不止要獲得課本的知識(shí),更多的是通過學(xué)習(xí)技術(shù)知識(shí)提高解決問題的能力,這樣我們才能走在最前方,本文主要講述Java高質(zhì)量代碼之?dāng)?shù)組與集合
    2013-08-08

最新評論