<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java前沿分享:value或許成為java的新關(guān)鍵字

          共 2300字,需瀏覽 5分鐘

           ·

          2022-01-23 15:03

          2022年Java將有什么新的特性和改進(jìn),我相信很多Java開發(fā)者都想知道。結(jié)合Java語(yǔ)言架構(gòu)師布萊恩·格茨Brian Goetz)最近的一些分享,胖哥給大家爆個(gè)料。老規(guī)矩,點(diǎn)贊、再看、轉(zhuǎn)發(fā)、星標(biāo)走起。

          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)。

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

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

          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?顯然是無意義的。

          讓我們?cè)賮砼e一個(gè)現(xiàn)實(shí)中的例子,兩件相同尺寸、材質(zhì)的紅色衣服肯定是兩件不同的衣服,但是它們的材質(zhì)肯定是一種材質(zhì),顏色肯定是一種顏色,不會(huì)有傻子認(rèn)為這是兩種顏色。這里面的尺寸當(dāng)然可以通過Java中的原始類型去描述,但是材質(zhì)和顏色不行(雖然顏色可以用十六進(jìn)制表示),這里的尺寸、材質(zhì)、顏色都應(yīng)該被認(rèn)為是原語(yǔ)。

          ?

          ?

          ?

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

          對(duì)象頭

          為了理解Valhalla引入的?Value Object / Class?和?Primitive Object / 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)、反射。最近我還整理了一批包括C++、java、Python、JavaScript等各種語(yǔ)言,還有操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)、網(wǎng)絡(luò)等各方面的學(xué)習(xí)資料,大家可以關(guān)注公眾號(hào)TJ君,回復(fù)武功秘籍領(lǐng)取。

          但是凡事都有兩面性,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)目為這樣的場(chǎ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?????????????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)庫(kù)中的一些原有類如果被認(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)思了好幾天,從場(chǎng)景出發(fā)來了解一門編程語(yǔ)言的設(shè)計(jì)有利于從根本提高自己。如果你想了解更多關(guān)于Valhalla的東西,可以關(guān)注并星標(biāo)這個(gè)寶藏公眾號(hào)。

          對(duì)了,我們創(chuàng)建了一個(gè)高質(zhì)量的技術(shù)交流群,與優(yōu)秀的人在一起,自己也會(huì)優(yōu)秀起來,趕緊點(diǎn)擊加群,享受一起成長(zhǎng)的快樂

          推薦閱讀


          前沿技術(shù)早知道,彎道超車有希望?

          積累超車資本,從關(guān)注DD開始

          點(diǎn)擊閱讀原文,送你免費(fèi)Spring Boot教程!

          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜福利大香蕉 | 欧美熟妇操屄视频 | 国产操逼免费网站 | 黄色性爱网址 | 五月综合淫 |