內存溢出和內存洩漏

概述

內存洩漏:

內存洩漏是指在程序申請內存後, 那些被該回收的內存無法被系統回收. 內存洩漏的堆積, 最終會耗盡系統的所有內存

在c++中需要程序員手動釋放內存對象, 所以更容易存在內存洩漏. java中有自動回收機制, 即垃圾回收, 使得該問題得到了有效的改善, 但也時有可能發生內存洩漏的, 因為java gc判斷對象是否可以被回收使用的是可達性算法, 若一個對象已經無用, 但卻被其他有用對象所引用, 是不會進行回收的.

關於java虛擬機的垃圾回收可以看這篇文章:

內存溢出:

內存溢出是指程序在申請內存時, 沒有足夠的內存空間供其使用.

比如申請了一個int的內存, 要方long才能存下的值, 就會發生內存溢出.

比如說棧, 當棧滿時在執行入棧操作, 必然會發生內存溢出, 叫做上溢出, 棧空時執行出棧操作也會發生溢出, 叫做下溢出.

同時, 死循環遞歸等也易發生內存溢出.


分享到:


相關文章: