b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

什么是内存泄露所谓内存泄漏,会导致整个系统卡顿甚至崩溃

电脑杂谈  发布时间:2021-06-06 08:03:47  来源:网络整理

这是我参加文文挑战赛的第 4 天。活动详情请见:文文挑战

一、什么是内存泄漏

所谓内存泄漏,是指使用的内存在生命周期的释放期内没有被释放,会导致内存泄漏。当内存泄漏严重时,会导致整个系统死机甚至崩溃。

二、JavaScript 内存管理

对于像C C++这样的语言,开发者可以直接控制内存的分配和回收。但是在 JavaScript 中,内存空间是由程序自己处理的,也就是说 JavaScript 有自动垃圾回收机制。

1、内存生命周期

image.png

2、内存分配

在 JavaScript 中,给一个数据类型的变量赋值就是自动分配内存,比如:

let num = 123  // 给数值变量分配内存
const str = "ababa"  // 给字符串分配内存
const obj = {  // 给对象分配内存
    name: "ababa",
    id: 1
}
const arr = [1,2,3] // 给数组分配内存
function fn(param){ // 给函数分配内存
    return param
}
复制代码

js内存泄漏怎么解决_js内存泄漏是什么意思_js内存泄漏

3、内存使用

如上所述,使用内存就是读写分配的内存。例如:

let num = 123  // 给数值变量分配内存
function fn(param){ // 给函数分配内存
    return param
}
fn(num)  // 进行读写操作
复制代码

4、内存释放

为了避免内存泄漏,我们先来看看JavaScript垃圾回收机制。内存泄漏一般发生在垃圾回收的过程中。因为 JavaScript 的内存回收机制可以回收大部分垃圾内存,所以还是存在无法回收的情况。如果存在这些情况,我们需要手动清理内存。

5、JavaScript 垃圾回收机制

JavaScript 中有两种常见的垃圾回收机制:标签清除和引用计数。

(1)标记去除方法

这是 JavaScript 中最常用的垃圾回收方法。即引用后,标记无用的内存数据,垃圾回收器删除标记的变量。

image.png

(2)引用计数方法

所谓的“引用计数”,是指语言引擎有一个“引用表”,用来保存内存中所有资源(通常是各种值)的引用次数。如果某个值的引用次数为0,则表示该值不再使用,可以释放这块内存。

6、JavaScript 内存泄露常见场景(1)被忘的Timer

经常看到身边很多同学写了很多定时器,但是定义了定时器之后,并没有考虑清空定时器。这会造成一定程度的内存泄漏。

  // 被遗忘的定时器
  function f() {
      let obj = new Array(100000)
      setInterval(() => {
          let myObj = obj
      },1000)
  }
复制代码

上面的代码是使用定时器的典型方式。这种方法会导致内存泄漏。正确的做法应该是:

  // 被遗忘的定时器
  function f() {
      let obj = new Array(100000)
      let count = 0  //使用计数器
      let timer = setInterval(() => {
          if (count === 5) clearInterval(timer);  // 当计数器执行到第五次的时候清除定时器,防止内存泄漏
          let myObj = obj
          count++  // 执行成功后计数器加一
      },1000)
      
  }
复制代码

(2)控制台打印

js内存泄漏是什么意思_js内存泄漏_js内存泄漏怎么解决

控制台的打印也会导致内存泄漏。我们在开发过程中经常会写下很多控制台。测试完成后记得删除这些测试语句。

(3)意外的全局变量

什么是意外的全局变量?比如我们看下面的代码

  function fn(num){
      basicNum = 1
      return basicNum+num
  }
  fn(2)
复制代码

全局变量在正常情况下是不会被垃圾回收器回收的,比如上面的变量basicNum,就是直接赋值而不声明,导致我们分配给这个全局变量的内存空间一直存在。如果赋值是一个非常大的数组,那么内存会比较大。

其实不注意的话,也可以开启严格模式,这样不注意的时候就可以检测出来,会出现错误警告。

image.png

(4)被遗忘的事件器

我们在开发过程中写了很多没用的事件器。如果我们忘记清理它,也会造成内存泄漏。

以上就是JavaScript内存泄漏的基本内容~~


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-380804-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...