內(nèi)存有分類(lèi)嗎?什么類(lèi)型的內(nèi)存可以回收?當(dāng)然具有分類(lèi)
內(nèi)存之間的關(guān)系是什么呢?
你的程序有時(shí)候會(huì)因?yàn)橄到y(tǒng)內(nèi)存不足而被殺死,這個(gè)時(shí)候你應(yīng)該更多關(guān)注物理內(nèi)存層面。 虛擬內(nèi)存是做啥的?我們?cè)谝胩摂M內(nèi)存之前,程序指令必須都在物理內(nèi)存內(nèi),這樣使得程序的大小被限制在物理內(nèi)存的大小以內(nèi)。事實(shí)上,有很多情況并不需要將整個(gè)程序放在內(nèi)存中。來(lái)看下面一個(gè)實(shí)例程序:
首先申請(qǐng)了100兆的虛擬內(nèi)存,操作系統(tǒng)很懶的,你申請(qǐng)了,但是你只要不用,我就不會(huì)給你分配物理內(nèi)存。后來(lái)for循環(huán)中,我們進(jìn)行讀寫(xiě),操作系統(tǒng)就會(huì)分配3兆的物理內(nèi)存,而其他97兆是在虛擬內(nèi)存。 所以虛擬內(nèi)存的使用,使得程序不再受物理內(nèi)存空間的限制,程序的地址不一定在內(nèi)存上,也可能在輔存上。用戶可以為一個(gè)巨大的虛擬空間地址編寫(xiě)程序。 使用Allocations工具來(lái)驗(yàn)證剛才的說(shuō)法下面這個(gè)圖片,剛才已經(jīng)分析過(guò)了,對(duì)于虛擬內(nèi)存和物理內(nèi)存的占用應(yīng)該已經(jīng)了解到了。 我們把兩段代碼放在兩個(gè) 然后我們通過(guò)
然后點(diǎn)擊 點(diǎn)擊 虛擬內(nèi)存 VS 物理內(nèi)存首先了解內(nèi)存抽象這么一個(gè)概念,我們的程序訪問(wèn)的都是邏輯地址空間(也叫虛擬地址),邏輯地址需要經(jīng)過(guò)轉(zhuǎn)換之后才可以訪問(wèn)到物理內(nèi)存。虛擬內(nèi)存到物理內(nèi)存的映射是怎樣的呢?
為什么桌面系統(tǒng)中很少有應(yīng)用因?yàn)閮?nèi)存過(guò)多而被Kill掉,但是iOS會(huì)呢?對(duì)于桌面操作系統(tǒng),是具有豐富的輔存的,我們的操作系統(tǒng)可以使用置換機(jī)制( 但是對(duì)于移動(dòng)設(shè)備(包括蘋(píng)果、安卓等),無(wú)Swap機(jī)制,主要是由于移動(dòng)設(shè)備的閃存容量很有限,并且閃存的頻繁讀寫(xiě)很降低壽命。對(duì)于iOS使用的就是Kill掉優(yōu)先級(jí)低的進(jìn)程。下面一個(gè)問(wèn)題進(jìn)行詳細(xì)闡述。 iOS內(nèi)存管理機(jī)制是怎樣的?基于什么原則來(lái)Kill掉進(jìn)程呢?iOS使用的是低內(nèi)存處理機(jī)制 從上往下,優(yōu)先級(jí)越來(lái)越高,看圖可以發(fā)現(xiàn),優(yōu)先級(jí)由低到高是: ! |
|
來(lái)自: jlland > 《待分類(lèi)》