內(nèi)存分配的過程
1缭嫡、分配的內(nèi)存實(shí)際上說虛擬地址,而不是物理地址抬闷,這個(gè)地址只是分配妇蛀,還沒有映射,需要用到的時(shí)候再進(jìn)行映射
2笤成、需要進(jìn)行讀寫的時(shí)候评架,發(fā)現(xiàn)沒有映射就會觸發(fā)缺頁中斷,如果有空閑的物理內(nèi)存炕泳,直接分配物理內(nèi)存纵诞,沒有的話就要進(jìn)行內(nèi)存回收
3、內(nèi)存回收分為后臺內(nèi)存回收和直接內(nèi)存回收喊崖,后臺內(nèi)存回收是在內(nèi)存緊張時(shí)喚醒kswapd線程進(jìn)行異步回收挣磨,不會阻塞進(jìn)程的執(zhí)行,這里的緊張指的是內(nèi)存使用超過一定的閾值荤懂,這里應(yīng)該盡早觸發(fā)異步回收茁裙,讓系統(tǒng)的內(nèi)存保持足夠
4、后臺回收跟不上速度的話就要觸發(fā)直接內(nèi)存回收节仿,這個(gè)回收的過程是同步的晤锥,會阻塞進(jìn)程的執(zhí)行。
5廊宪、如果直接內(nèi)存都沒達(dá)到要求的話矾瘾,那就回觸發(fā)OOM機(jī)制了
可以回收的內(nèi)存
1、文件頁:內(nèi)核緩存的磁盤數(shù)據(jù)和內(nèi)核緩存的文件數(shù)據(jù)箭启,被改過的就是臟頁壕翩,否則就是干凈頁,干凈頁可以直接釋放掉傅寡,臟頁需要寫回到磁盤再釋放放妈,會有磁盤IO,效率較低
2荐操、匿名頁:比如堆棧數(shù)據(jù)等芜抒,有可能還要訪問,所以不能直接釋放內(nèi)存托启,而是通過swap機(jī)制把不常訪問的頁先寫到磁盤宅倒,然后釋放掉內(nèi)存,等后面用到的時(shí)候再加載到內(nèi)存屯耸,這里判斷不常使用的算法睡LRU算法拐迁,維護(hù)了兩個(gè)鏈表蹭劈,活躍鏈表和不活躍鏈表