[Day8] JavaScript 的记忆体回收机制

前一天提升章节中有提到,在执行环境中,会创造函式与变数的记忆体空间,但若这些记忆体一直不释放,会造成记忆体满载或导致效能变差等问题,所以要适时地释放记忆体空间,所以下面来了解关於 JavaScript 记忆体的存放与释放

执行环境与释放

在执行函式时会产生执行环境,而执行环境是一层一层建立并堆叠执行,当运作完成则会一层一层离开,而当执行环境一层一层离开,同时也会释放记忆体空间,最後仅留下全域执行环境所占用的记忆体。

回收机制(Garbage collrction)

JavaScript 在大部分情况下采用 回收机制 来决定记忆体是否要回收,当一个物件,没有任何物件参考它时,则会被视为记忆体的垃圾,因而被释放,以下为课程中使用范例:

范例1

// 1.创造长字串来占用记忆体空间
function randomString(length) {
  var result = '';
  var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  var charactersLength = characters.length;
  for (var i = 0; i < length; i++) {
    result += characters.charAt(Math.floor(Math.random() * charactersLength));
  }
  return result;
}

// 2.建立空阵列 data
var data = [];

// 3.建立函式 getData - 将 randomString 产生的长字串放入阵列 data
function getData() {
  for (let i = 0; i < 1000; i++) {
    data.push(randomString(5000))
  }
}

// 4.运行函式 getData
getData();

// 5.显示阵列 data
console.log(data);

范例2

// 1.创造长字串来占用记忆体空间
function randomString(length) {
  var result = '';
  var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  var charactersLength = characters.length;
  for (var i = 0; i < length; i++) {
    result += characters.charAt(Math.floor(Math.random() * charactersLength));
  }
  return result;
}

// 2.建立函式 getData
function getData() {
    // 2-1.在函式内建立空阵列 data
    var demoData = [];
    
    // 2-2.将 randomString 产生的长字串放入阵列 data
    for (var i = 0; i < 1000; i++) {
      demoData.push(randomString(5000))
    }
    
    // 2-3.显示阵列 data
    console.log(demoData);
    // 注意:Chrome console 中的行为也会需要记忆体
}

// 3.运行函式 getData
getData();

参考文献

六角学院 - JavaScript 核心篇

MDN - 记忆体管理

先上传,撰写中ing/images/emoticon/emoticon02.gif


<<:  [DAY 09] 光头古早味手工蛋饼

>>:  Day9-TypeScript(TS)的介面型别(Interface)Part 2

Day 29 - 从大学肄业,联成电脑,到 Microsoft MVP 得奖,从零开始的软件工程师

这篇文章是从零开始到 MVP 系列的第二篇,想要看第一篇请往上点。 新创公司甘苦谈 每一间新创公司都...

Day26 指派角色给使用者

昨天角色的 CRUD 功能都完成了,接着就是要把角色指派给使用者了,先建立一个 ViewModel ...

Day2 基础安装 + 加码:nvm

今天正式进入主题~ 在开始前我们必须先把环境建立起来,我知道很多人会使用webpack,但这边我是使...

14. Log X Notification x Slack

好想被推播啊 身为一个负责的工程师,当系统有错误的时候,总是想收到即时推播讯息该怎麽做? 上一篇有提...

[从0到1] C#小乳牛 练成基础程序逻辑 Day 4 - I/O 宣告变数 赋予值

Input/Output | 键盘侠练起来 | 把梦想变成code的样子 🐄点此填写今日份随堂测验...