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

Java即將引入新對象類型來解決內(nèi)存使用問題

 更新時間:2022年05月23日 16:46:14   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了Java即將引入新對象類型來解決內(nèi)存使用問題,文章通過圍繞主題的相關資料展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下

前言:

2022年Java將有什么新的特性和改進,我相信很多Java開發(fā)者都想知道。結(jié)合Java語言架構師布萊恩·格茨Brian Goetz)最近的一些分享, 

一、Valhalla

布萊恩·格茨在去年底發(fā)表了一篇名為State of Valhalla的文章,里面信息量非常大,里面提到早在2014年Java項目組就啟動了一個名叫Valhalla的項目,這個項目將為JVM平臺帶來更加靈活的、扁平化的數(shù)據(jù)類型。在2021年該項目將有進一步的動作,值對象(value objects)原始類(primitive classes)專用泛型(specialized generics)即將引入JVM平臺。今天先來聊聊這個值對象是個啥。

我們知道什么是“值”,什么是“對象”,但是什么是“值對象”呢?不光你們懵逼,我也懵逼,來一起研究研究。

二、Java類型系統(tǒng)的不足

Java類型系統(tǒng)由內(nèi)置的10種類型組成,這10種類型無法直接表達復雜的數(shù)據(jù)結(jié)構,例如字符串、三維坐標、空間向量等等,但是開發(fā)者可以用這10種類型來為業(yè)務實體建模,Java的類型體系是非常有用的。

但是Java類型仍然存在“缺陷”, 同一個類的兩個對象包含完全相同的屬性,但是它們的內(nèi)存尋址是不一樣的。

所以從某種意義上說,他們有自己的身份標識。

但是對于原始類型就不一樣了,如果一個int類型的變量值為7,另一個變量也為7,區(qū)分它們有意義嗎?這個7還是那個7?顯然是無意義的。

讓我們再來舉一個現(xiàn)實中的例子,兩件相同尺寸、材質(zhì)的紅色衣服肯定是兩件不同的衣服,但是它們的材質(zhì)肯定是一種材質(zhì),顏色肯定是一種顏色,不會有傻子認為這是兩種材質(zhì)、兩種顏色。這里面的尺寸可以通過Java中的原始類型去描述,但是材質(zhì)和顏色不行(雖然顏色可以用十六進制表示),在這個場景里,尺寸、材質(zhì)、顏色都應該被認為是一種原始屬性,不應該具有標識,現(xiàn)在的Java顯然不能直接滿足這一點。

這個痛點促使了Valhalla項目的誕生。

三、對象頭

為了理解Valhalla引入的 Value Class 概念能夠給我們帶來了什么,我們需要看看JVM是如何將對象保存在內(nèi)存中的。

對象頭對類的對象非常重要,決定哪個線程可以訪問對象、垃圾收集器標記、對象hash;更重要的還有對象的類型指針,它能夠在運行時動態(tài)訪問對象的類,并從其類到該對象的詳細信息,比如繼承多態(tài)、反射。

但是凡事都有兩面性,Java對象內(nèi)存占用的大小取決于它所包含的信息的總和,對象頭在 64 位系統(tǒng)上至少需要 16 個字節(jié),在 32 位系統(tǒng)上至少需要 8 個字節(jié)(當然JVM可以通過配置項去設置如何保存對象頭)。很多對象不需要多線程,也不需要什么對象標識,就像上面提到的衣服的顏色,只有顏色的值才是我們關心的事。這種冗余的內(nèi)存占用讓Java為人詬病。

四、Value Class

對于許多對象來說,它屬性值的相等性是我們關心的,其它類信息沒什么用,而且只為保存值和對這些值進行操作而編寫的類在所有類中所占的比例非常大。Valhalla項目為這樣的場景引入了一個新的類類型:Value Class。目前還只是JEP草案,但是已經(jīng)初具形態(tài):

value class Substring implements CharSequence {
    private String str;
    private int start;
    private int end;
    public Substring(String str, int start, int end) {
        checkBounds(start, end, str.length());
        this.str = str;
        this.start = start;
        this.end = end;
    }
    public int length() {
        return end - start;
    }
    public char charAt(int i) {
        checkBounds(0, i, length());
        return str.charAt(start + i);
    }
    public Substring subSequence(int s, int e) {
        checkBounds(s, e, length());
        return new Substring(str, start + s, start + e);
    }
    public String toString() {
        return str.substring(start, end);
    }
    private static void checkBounds(int start, int end, int length) {
        if (start < 0 || end < start || length < end)
            throw new IndexOutOfBoundsException();
    }
}

Value Class和我們常見的類差不多,但是它可能具有下面一些特性(這些依然在討論中):

  • 值對象是沒有身份的對象,通常情況下我們用==運算符檢查身份,然而這里==可能和equals()不再有區(qū)別。
  • 值類本身和它的所有字段默認都是final的。
  • 該類不能直接或間接地實現(xiàn)java.lang.IdentityObject(有身份標識類的新超類)。這意味著超類要么是無狀態(tài)抽象類,要么Object是無狀態(tài)抽象類。
  • 值類都是java.lang.ValueObject的隱式實現(xiàn)。
  • 沒有構造super函數(shù)調(diào)用構造函數(shù)。將在不執(zhí)行任何超類初始化代碼的情況下創(chuàng)建實例。
  • 無法在值類中使用synchronized關鍵字。
  • (可能)該類沒有聲明finalize()方法。
  • (可能)構造函數(shù)不使用this來設置構造函數(shù)主體中的字段,或者可能在所有字段都明確內(nèi)存分配之后。

其它的操作和普通的類應該差別不大,但是要注意的是,JDK標準庫中的一些原有類如果被認定為Value Class需要做兼容性處理。

value要成為保留字還是關鍵字?

這不是全部:

Value Class對Java類對象頭進行了閹割,有利于降低Java的內(nèi)存消耗,但這僅僅是Valhalla計劃的一小部分。對于這一部分過于超前的內(nèi)容,胖哥寫起來其實是很有困難的,構思了好幾天。從場景出發(fā)來了解一門編程語言的特性設計是非常有利于從根本提高自己的。如果你想了解更多關于Valhalla的東西,可以關注我,我會繼續(xù)分享相關的知識。

到此這篇關于Java即將引入新對象類型來解決內(nèi)存使用問題的文章就介紹到這了,更多相關Java 內(nèi)存問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文詳解Java抽象類到底有多抽象

    一文詳解Java抽象類到底有多抽象

    這篇文章主要介紹了一文詳解Java抽象類到底有多抽象,抽象方法所在的類必須是抽象類,子類若繼承了一個抽象類,就必須覆寫父類的所有抽象方法,這里的子類是普通類,是強制要求覆寫所有抽象方法,但是如果子類也是一個抽象類,那么就可以不覆寫
    2022-06-06
  • SpringBoot?SPI?機制和實現(xiàn)自定義?starter

    SpringBoot?SPI?機制和實現(xiàn)自定義?starter

    這篇文章主要介紹了SpringBoot?SPI機制和實現(xiàn)自定義?starter,全稱是Service?Provider?Interface。簡單翻譯的話,就是服務提供者接口,是一種尋找服務實現(xiàn)的機制
    2022-08-08
  • IDEA高效查看源碼的快捷鍵及小技巧

    IDEA高效查看源碼的快捷鍵及小技巧

    本篇文章這一部分的內(nèi)容主要為大家介紹了一些平時看源碼的時候常用的快捷鍵/小技巧!非常好用!掌握這些快捷鍵/小技巧,看源碼的效率提升一個等級
    2022-01-01
  • Java調(diào)用商品詳情API的項目實踐

    Java調(diào)用商品詳情API的項目實踐

    在現(xiàn)代電子商務網(wǎng)站中,商品詳情API是一個重要的組件,本文就來介紹一下Java調(diào)用商品詳情API的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • java 用遞歸獲取一個目錄下的所有文件路徑的小例子

    java 用遞歸獲取一個目錄下的所有文件路徑的小例子

    還是日志的問題,log4j生成的日志文件,自動保存到月份所在的文件夾中,需要獲取到所有的日志文件,包括文件夾
    2013-09-09
  • spring?boot集成p6spy的最佳實踐

    spring?boot集成p6spy的最佳實踐

    這篇文章主要介紹了spring?boot集成p6spy的最佳實踐-p6spy-spring-boot-starter的項目案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • maven國內(nèi)鏡像配置的方法步驟

    maven國內(nèi)鏡像配置的方法步驟

    這篇文章主要介紹了maven國內(nèi)鏡像配置的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java輸出1~100之間的全部素數(shù)的5種方式總結(jié)

    java輸出1~100之間的全部素數(shù)的5種方式總結(jié)

    這篇文章主要介紹了java輸出1~100之間的全部素數(shù)的5種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解決Feign配置RequestContextHolder.getRequestAttributes()為null的問題

    解決Feign配置RequestContextHolder.getRequestAttributes()為null的問題

    這篇文章主要介紹了解決Feign配置RequestContextHolder.getRequestAttributes()為null的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 淺談Java工程讀取resources中資源文件路徑的問題

    淺談Java工程讀取resources中資源文件路徑的問題

    下面小編就為大家?guī)硪黄獪\談Java工程讀取resources中資源文件路徑的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

习水县| 洛浦县| 鸡西市| 伊宁县| 德惠市| 庄河市| 白水县| 和田市| 边坝县| 洪雅县| 曲阜市| 凌云县| 宝丰县| 桂东县| 瓦房店市| 金川县| 金堂县| 福建省| 汝州市| 和田县| 中牟县| 客服| 宜君县| 资中县| 子洲县| 定陶县| 蓬安县| 静海县| 盱眙县| 泽普县| 枞阳县| 巴青县| 调兵山市| 江口县| 且末县| 娄烦县| 新建县| 东方市| 井陉县| 都安| 江源县|