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

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

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

前言:

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

一、Valhalla

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

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

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

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

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

所以從某種意義上說,他們有自己的身份標(biāo)識(shí)。

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

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

這個(gè)痛點(diǎn)促使了Valhalla項(xiàng)目的誕生。

三、對(duì)象頭

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

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

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

四、Value Class

對(duì)于許多對(duì)象來說,它屬性值的相等性是我們關(guān)心的,其它類信息沒什么用,而且只為保存值和對(duì)這些值進(jìn)行操作而編寫的類在所有類中所占的比例非常大。Valhalla項(xiàng)目為這樣的場景引入了一個(gè)新的類類型: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和我們常見的類差不多,但是它可能具有下面一些特性(這些依然在討論中):

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

其它的操作和普通的類應(yīng)該差別不大,但是要注意的是,JDK標(biāo)準(zhǔn)庫中的一些原有類如果被認(rèn)定為Value Class需要做兼容性處理。

value要成為保留字還是關(guān)鍵字?

這不是全部:

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

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

相關(guān)文章

  • Springboot項(xiàng)目中單元測試時(shí)注入bean失敗的解決方案

    Springboot項(xiàng)目中單元測試時(shí)注入bean失敗的解決方案

    這篇文章主要介紹了Springboot項(xiàng)目中單元測試時(shí)注入bean失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • springBoot的事件機(jī)制GenericApplicationListener用法解析

    springBoot的事件機(jī)制GenericApplicationListener用法解析

    這篇文章主要介紹了springBoot的事件機(jī)制GenericApplicationListener用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值的相關(guān)資料
    2019-09-09
  • Java垃圾回收器的方法和原理總結(jié)

    Java垃圾回收器的方法和原理總結(jié)

    本篇文章主要介紹了Java垃圾回收器的方法和原理總結(jié),Java垃圾回收器是Java虛擬機(jī)的重要模塊,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • Java利用Socket類實(shí)現(xiàn)TCP通信程序

    Java利用Socket類實(shí)現(xiàn)TCP通信程序

    TCP通信能實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)交互,通信的兩端,要嚴(yán)格區(qū)分為客戶端與服務(wù)端,下面我們就來看看Java如何利用Socket類實(shí)現(xiàn)TCP通信程序吧
    2024-02-02
  • Idea2023配置JavaWeb項(xiàng)目(最新)

    Idea2023配置JavaWeb項(xiàng)目(最新)

    本文將介紹如何配置JavaWeb項(xiàng)目,以在Idea中實(shí)現(xiàn)開發(fā)環(huán)境,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 詳解在Spring Boot中使用Mysql和JPA

    詳解在Spring Boot中使用Mysql和JPA

    本文向你展示如何在Spring Boot的Web應(yīng)用中使用Mysq數(shù)據(jù)庫,也充分展示Spring Boot的優(yōu)勢
    2017-04-04
  • IDEA如何撤銷本地commit的代碼

    IDEA如何撤銷本地commit的代碼

    這篇文章主要介紹了IDEA如何撤銷本地commit的代碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 全面解析Java main方法

    全面解析Java main方法

    main方法是我們學(xué)習(xí)Java語言學(xué)習(xí)的第一個(gè)方法,也是每個(gè)java使用者最熟悉的方法,每個(gè)Java應(yīng)用程序都必須有且僅有一個(gè)main方法。這篇文章通過實(shí)例代碼給大家介紹java main方法的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Java Socket編程(五) 簡單的WEB服務(wù)器

    Java Socket編程(五) 簡單的WEB服務(wù)器

    Java Socket編程(五) 簡單的WEB服務(wù)器...
    2006-12-12
  • java使用lambda表達(dá)式多條件排序方式

    java使用lambda表達(dá)式多條件排序方式

    這篇文章主要介紹了java使用lambda表達(dá)式多條件排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論