【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位

China Soft發表於2024-11-06

https://blog.csdn.net/qq_44291585/article/details/122026034

記憶體洩漏和記憶體溢位
瞭解記憶體洩露和記憶體溢位之前,我們得知道什麼是記憶體!下面就會詳細講解什麼記憶體

什麼是記憶體
記憶體(Memory)是計算機的重要部件之一,也稱記憶體儲器和主儲存器,它用於暫時存放CPU中的運算資料,與硬碟等外部儲存器交換的資料。它是外存與CPU進行溝通的橋樑,計算機中所有程式的執行都在記憶體中進行,記憶體效能的強弱影響計算機整體發揮的水平。只要計算機開始執行,作業系統就會把需要運算的資料從記憶體調到CPU中進行運算,當運算完成,CPU將結果傳送出來。

記憶體的執行也決定計算機整體執行快慢的程度。

記憶體條由記憶體晶片、電路板、金手指等部分組成。

在專案中我們開啟工作管理員=>效能,這裡就有我們記憶體的使用情況


記憶體洩漏和記憶體溢位
記憶體是用於暫時存放CPU中的運算資料,與硬碟等外部儲存器交換的資料。既然是用來儲存資料那麼就會出現記憶體洩漏和記憶體溢位的情況!可能大家會覺得洩漏和溢位不是一樣的嗎🤣接下來就會詳細講解什麼是記憶體洩漏,什麼是記憶體溢位,以及他們的區別

記憶體溢位
記憶體溢位(out of memory):一種程式執行出現的錯誤。當程式執行需要的記憶體超過剩餘的記憶體時,就會丟擲記憶體溢位的錯誤。當我們定義一個變數時,程式會給他對應的記憶體。當然程式分配的記憶體是由極限的,當我們不停為變數不停的不停的給它新增資料,就會超出這個極限。於是程式就會崩潰,我們稱這個過程到結果叫記憶體溢位

如下,我們有一個杯子,裡面有一些水,我們一直往杯子裡倒水,會出現什麼情況呢🤔沒錯,會出現水會從杯子裡面溢位來,如下下圖一樣。當我們做出把水倒出杯子,被家長看到,家長就會告訴你們這是錯誤的行為,嚴重的可能還會打你一頓。

上面舉了一個例子,下面上程式碼,讓我們看看什麼是記憶體溢位吧🧐

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">

</style>
</head>
<body>
你好
<script type="text/javascript">
var obj=[]
</script>
</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
這是我們定義了變數obj,給obj分配了空間,obj並沒有資料,這個時候我們執行程式碼是正常的,如下:

當我們瘋狂的obj新增資料,如下:

for(let i=0;i<10000;i++){
obj.push(new Array(1000000))
}
1
2
3
這個時候頁面就崩潰了,變成下面這樣子了

這就是記憶體溢位導致我們的程式報錯,崩潰了!

記憶體洩漏
記憶體洩漏:佔用的記憶體沒有及時釋放,記憶體洩漏積累得多了就會導致容易記憶體溢位。當我們定義一個全域性變數時,系統就會給這個變數分配記憶體,然而這個變數,一直佔用了一個塊地方,沒有讓出地盤,這種情況我們稱它為記憶體洩漏

如下這是我們平時的記憶體4.3G:

接下來,看一下我們使用了全域性變數沒有釋放資源會怎麼樣🤔
程式碼如下:

window.abc=10
console.log(window.abc)
1
2
如下,我們清晰的看到記憶體比剛剛多了0.3G,這就是記憶體洩漏

我們在看看釋放資源會發生什麼呢🤔

window.abc=null
1
過了一會記憶體又變少了要變回平時的樣子


到了這裡就可以總結一下了,記憶體溢位和記憶體洩露的區別了

總結
記憶體洩漏指的是佔用的記憶體沒有及時的釋放

記憶體溢位指的是需要的記憶體超過剩餘的記憶體

記憶體洩漏不一定會記憶體溢位,但是記憶體洩漏過多就會造成記憶體溢位
————————————————

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-NC-SA 版權協議,轉載請附上原文出處連結和本宣告。

原文連結:https://blog.csdn.net/qq_44291585/article/details/122026034

相關文章