溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中怎么為對(duì)象創(chuàng)建分配內(nèi)存

發(fā)布時(shí)間:2021-07-28 15:16:27 來源:億速云 閱讀:158 作者:Leah 欄目:大數(shù)據(jù)

Java中怎么為對(duì)象創(chuàng)建分配內(nèi)存,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

1、指針碰撞

        假設(shè)java堆中內(nèi)存是絕對(duì)規(guī)整的,所有用過的內(nèi)存都放在一邊,空閑的內(nèi)存放在另一邊,中間放著一個(gè)指針做為分界點(diǎn)的指示器,那對(duì)象所分配的內(nèi)存就僅僅是把那個(gè)指針向空閑空間挪動(dòng)一段與對(duì)象大小相等的距離

2、空閑列表

        如果java堆中的內(nèi)存并不是規(guī)整的,已使用的內(nèi)存和空閑的內(nèi)存相互交錯(cuò),那虛擬機(jī)就必須維護(hù)一個(gè)列表,記錄上哪些內(nèi)存是可用的,在分配的時(shí)候從列表中找到一塊足夠大的空間劃分給對(duì)象實(shí)例,并更新列表上的記錄

        并發(fā)情況下,線程是不安全的,可能出現(xiàn)正在給對(duì)象A分配內(nèi)存,指針還沒來得及修改,對(duì)象B又同時(shí)使用了原來的指針來分配內(nèi)存的情況。

        解決方案:

                1、CAS  虛擬機(jī)采用CAS + 失敗重試的方式保證更新操作的原子性

                2、本地線程分配緩存(TLAB) 即每個(gè)線程預(yù)先在堆中分配一小塊內(nèi)存,哪個(gè)線程要分配內(nèi)存,就在哪個(gè)線程的TLAB上分配,只有TLAB用完并分配新的TLAB時(shí),才會(huì)需要使用1方式 。 虛擬機(jī)是否使用TLAB,可以通過-XX:+/-UseTLAB參數(shù)來設(shè)定。

關(guān)于Java中怎么為對(duì)象創(chuàng)建分配內(nèi)存問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI