內(nèi)存泄漏:
原因:
在內(nèi)存中供用戶使用的內(nèi)存區(qū)有三個(gè):
程序存儲區(qū)、
靜態(tài)存儲區(qū)锄禽、
動態(tài)存儲區(qū)潜必。
程序的數(shù)據(jù)一般存放在靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。
靜態(tài)存儲區(qū)是當(dāng)程序開始的時(shí)候就分配好的一塊固定的內(nèi)存區(qū)沃但。
動態(tài)存儲區(qū)一般是在程序運(yùn)行過程中根據(jù)需要?jiǎng)討B(tài)去分配和釋放的內(nèi)存區(qū)域磁滚。這塊內(nèi)存區(qū)域需要開發(fā)人員在使用完畢之后進(jìn)行釋放,如果沒有釋放動態(tài)分配的內(nèi)存區(qū)域就會造成內(nèi)存泄漏宵晚。相應(yīng)的這塊區(qū)域也不能夠被使用垂攘。
簡單來說,就是你使用了一塊內(nèi)存區(qū)域淤刃,但是卻沒有釋放晒他,那么這塊內(nèi)存區(qū)域誰都用不了了,這就是內(nèi)存泄漏逸贾。
內(nèi)存溢出
原因:
當(dāng)一個(gè)程序向系統(tǒng)申請的所需內(nèi)存大于系統(tǒng)可提供使用的內(nèi)存時(shí)陨仅,這個(gè)時(shí)候就會產(chǎn)生內(nèi)存溢出津滞。
舉個(gè)例子:有一個(gè)可以裝50ml水的空杯子,但是你非得向這個(gè)被子里面倒了100ml水灼伤,那么這個(gè)時(shí)候多余的水肯定會流出來触徐,這就是水溢出了。那么放到內(nèi)存來講狐赡,就是內(nèi)存溢出撞鹉。
另外,內(nèi)存泄漏積累到一定程度颖侄,會占用很多內(nèi)存資源鸟雏,從而導(dǎo)致內(nèi)存溢出。
內(nèi)存碎片
內(nèi)存碎片分為外部碎片和內(nèi)部碎片
外部碎片:
外部碎片指的是還沒有被分配出去(不屬于任何進(jìn)程)览祖,但由于太小了無法分配給申請內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域孝鹊。
原因:
外部碎片是出于任何已分配區(qū)域或頁面外部的空閑存儲塊。這些存儲塊的總和可以滿足當(dāng)前申請的長度要求穴墅,但是由于它們的地址不連續(xù)或其他原因惶室,使得系統(tǒng)無法滿足當(dāng)前申請温自。
內(nèi)部碎片:
內(nèi)部碎片就是已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的
空間玄货;
原因:
內(nèi)部碎片是處于內(nèi)部或頁面內(nèi)部的存儲塊。占有這些區(qū)域或頁面的進(jìn)程并不使用這個(gè)存儲塊悼泌。而在進(jìn)程占有這塊存儲塊時(shí)松捉,系統(tǒng)無法利用它。直到進(jìn)程釋放它馆里,或進(jìn)程結(jié)束時(shí)隘世,系統(tǒng)才有可能利用這個(gè)存儲塊。