📒 博客首頁:?﹏??敬坤的博客 🎈
😊 我只是一個代碼的搬運工 🎃
🎉 歡迎來訪的讀者關注、點贊和收藏 🤞
😉 有問題可以私信交流 😆
📃 文章標題:JavaScript之深入淺出理解記憶體泄漏和記憶體溢位 🖍
目錄
- 記憶體泄漏和記憶體溢位
- 什么是記憶體
- 記憶體泄漏和記憶體溢位
- 記憶體溢位
- 記憶體泄漏
- 總結
記憶體泄漏和記憶體溢位
了解記憶體泄露和記憶體溢位之前,我們得知道什么是記憶體!下面就會詳細講解什么記憶體
什么是記憶體
記憶體(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>
這是我們定義了變數obj,給obj分配了空間,obj并沒有資料,這個時候我們運行代碼是正常的,如下:

當我們瘋狂的obj添加資料,如下:
for(let i=0;i<10000;i++){
obj.push(new Array(1000000))
}
這個時候頁面就崩潰了,變成下面這樣子了

這就是記憶體溢位導致我們的程式報錯,崩潰了!
記憶體泄漏
記憶體泄漏:占用的記憶體沒有及時釋放,記憶體泄漏積累得多了就會導致容易記憶體溢位,當我們定義一個全域變數時,系統就會給這個變數分配記憶體,然而這個變數,一直占用了一個塊地方,沒有讓出地盤,這種情況我們稱它為記憶體泄漏
如下這是我們平時的記憶體4.3G:

接下來,看一下我們使用了全域變數沒有釋放資源會怎么樣🤔
代碼如下:
window.abc=10
console.log(window.abc)
如下,我們清晰的看到記憶體比剛剛多了0.3G,這就是記憶體泄漏

我們在看看釋放資源會發生什么呢🤔
window.abc=null
過了一會記憶體又變少了要變回平時的樣子

到了這里就可以總結一下了,記憶體溢位和記憶體泄露的區別了
總結
記憶體泄漏指的是占用的記憶體沒有及時的釋放
記憶體溢位指的是需要的記憶體超過剩余的記憶體
記憶體泄漏不一定會記憶體溢位,但是記憶體泄漏過多就會造成記憶體溢位
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/386620.html
標籤:其他
下一篇:創建和檢索JSON格式的資料
