額外概念了解
jvm內(nèi)存空間是邏輯上連續(xù)的虛擬地址空間(虛擬內(nèi)存中的概念)映射到物理內(nèi)存(不一定連續(xù)),物理內(nèi)存不足時(shí)還會(huì)將物理內(nèi)存中的數(shù)據(jù)交換到swap(磁盤(pán)的一塊區(qū)域)。這塊水有點(diǎn)深,查閱資料做了個(gè)個(gè)人的總結(jié)。
內(nèi)存劃分,有指針碰撞和空閑列表這兩種劃分方式:
1、指針碰撞
當(dāng)內(nèi)存區(qū)域規(guī)整排列,也就是說(shuō)已用內(nèi)存放在一邊,空閑內(nèi)存放在一邊,中間用指針作為分界點(diǎn),在給新的對(duì)象分配內(nèi)存時(shí),可以將指針向空閑端移動(dòng)對(duì)象大小的距離。碰撞是由于指多線程訪問(wèn)時(shí),因內(nèi)存共享,會(huì)存在內(nèi)存沖突(指針碰撞)的情況,當(dāng)然可以使用CAS和TLAB兩種方式解決
2、空閑列表
當(dāng)內(nèi)存區(qū)域不規(guī)整排列,已用內(nèi)存和空閑內(nèi)存交錯(cuò),此時(shí)無(wú)法通過(guò)指針碰撞劃分內(nèi)存,jvm通過(guò)維護(hù)一個(gè)空閑列表,用來(lái)記錄空閑內(nèi)存區(qū)間,新對(duì)象內(nèi)存分配時(shí),找到一塊足夠大的內(nèi)存空間去分配,并更新空閑列表。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-732517.html
3、那么指針碰撞和空閑列表的使用時(shí)機(jī)是什么,或者說(shuō)什么時(shí)候內(nèi)存區(qū)域規(guī)整或者不規(guī)整呢?
不同GC垃圾回收器有不同垃圾回收算法,對(duì)于標(biāo)記-整理算法,內(nèi)存區(qū)域是規(guī)整的。而標(biāo)記-清除算法,內(nèi)存區(qū)域是不規(guī)整的。因此也驗(yàn)證了為何標(biāo)記清除算法會(huì)產(chǎn)生內(nèi)存碎片的問(wèn)題。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732517.html
jmm內(nèi)存模型說(shuō)明
jmm內(nèi)存模型中有工作內(nèi)存(本地內(nèi)存)和主內(nèi)存兩個(gè)概念
- 工作內(nèi)存是一個(gè)抽象概念,由每個(gè)線程獨(dú)享,實(shí)際指的是cpu寄存器與緩存,并不是真正的內(nèi)存條中的內(nèi)存。線程棧和棧幀屬于工作內(nèi)存的概念范疇。
- 主內(nèi)存區(qū)域被多線程共享,是真正的內(nèi)存條中的內(nèi)存,堆屬于主內(nèi)存概念范疇。
- 線程對(duì)變量的操作在工作內(nèi)存完成再寫(xiě)入到主內(nèi)存中
- 實(shí)例對(duì)象的成員變量無(wú)論是基礎(chǔ)類(lèi)型還是引用類(lèi)型都是存儲(chǔ)在堆區(qū)
- 實(shí)例對(duì)象的成員方法中的基礎(chǔ)變量存儲(chǔ)在棧幀中,引用類(lèi)型存儲(chǔ)在堆中
- 實(shí)例對(duì)象的靜態(tài)變量存儲(chǔ)在堆中,類(lèi)本身信息存儲(chǔ)在主內(nèi)存中(元空間)
到了這里,關(guān)于jvm對(duì)象內(nèi)存劃分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!