美文网首页js css html
JS 内存管理 GC算法

JS 内存管理 GC算法

作者: 咸鱼不咸_123 | 来源:发表于2022-04-13 19:33 被阅读0次

1.内存管理

不管什么样的编程语言,在代码的执行过程中都是需要给它分配内存的,不同的是某些编程语言需要我们自己手动的管理内存,某些编程语言可以自动帮我们管理内存。(因为内存资源是有限的)

不管是以什么样的方式来管理内存,内存的管理都会有如下的生命周期

  • 第一步:分配申请你需要的内存(申请)
  • 第二步:使用分配的内存(存放一些东西,比如对象呀)
  • 第三步:不需要使用时,对其进行释放。

不同的编程语言对于第一步和第三步会有不同的实现:

  • 手动管理内存:比如C、C++,都是需要手动申请和释放内存空间的
  • 自动管理内存:比如Java、JavaScript、Python、Swift、Dart等,它们有自动帮助我们管理内存

2.JS的内存管理

  • javascript会在定义变量时为我们分配内存
  • 但是内存分配方式是一样的嘛?
    • js对于基本数据类型的内存分配执行时,直接在栈空间进行分配
    • js对于复杂数据类型的内存分配时是在堆内存中开辟一片空间,并且将这块空间的指针返回值变量引用:
      11.png
12.png 13.png
  • 堆结构开辟的空间,在后面不使用时,会自动被js垃圾回收机制回收

3.JS的垃圾回收(GC)

因为内存的大小是有限的,所以当内存不再需要的时候,我们需要对其进行释放,以便腾出更多的内存空间

  • 在手动管理内存的语言中,我们需要通过一些方式自己来释放不再需要的内存,比如free函数

    • 但是这种管理方式是非常低效的,影响我们编写逻辑的代码的效率
    • 并且这种方式对开发者的要求非常高,并且一不小心就会产生内存泄露
  • 所以大部分现代编程语言都有自己的垃圾回收机制

    • 垃圾回收的英文是 Garbage Collection 简称:GC
    • 对于那些不再使用的对象,我们都称之为垃圾,需要被回收,以释放更多的内存空间。
    • 而我们语言的运行环境,比如Java的运行环境JVM,Javascript的运行环境js引擎都会有内存 垃圾回收器。
    • 垃圾回收器 简称GC ,所以在很多地方你看到GC其实指的是 垃圾回收器
    • 但是这里又出现了另外一个很关键的问题:GC怎么知道哪些对象不再使用的呢?
      • 这里就要用到GC算法了。

3.1 常见的GC算法——引用计数

堆空间有一个属性的retain count:默认是0,多一个引用+1,少一个引用-1

如果对象开辟在堆结构开辟的空间后,在栈结构中会引用,所以堆空间的属性retain count为1

  • 它会将引用为0的对象回收

这个算法有一个很大的弊端就是会产生循环引用

14.png

3.2 标记清除

  • 这个算法会设置一个根对象(root Object),垃圾回收器会从根对象开始,找所有从根开始有引用到的对象,对于那些没有被引用到的对象,就认为是不可用对象。

  • 这个算法可以很好的解决循环引用的问题

15.png
  • 红色是可到达的部分
  • 黄色是不可到达的部分

JS比较广泛的使用是标记清除,当然类似于V8引擎为了进行更好的优化,它在算法的实现细节上也会结合一些其他的算法。

4.总结

内存管理.png

相关文章

  • JS 内存管理 GC算法

    1.内存管理 不管什么样的编程语言,在代码的执行过程中都是需要给它分配内存的,不同的是某些编程语言需要我们自己手动...

  • Node.js内存管理机制分享

    Node.js内存管理Node.js的一些选项GC研究例子生产环境的设置 1. Node.js如何管理内存 [解惑...

  • iOS 内存管理-基础篇

    iOS内存管理主要有GC标记清除算法和引用计数方法两类:GC标记清除算法Garbage Collection,垃圾...

  • 常见GC算法与V8引擎

    内存管理 垃圾回收与常见GC算法 V8引擎的垃圾回收 Performance工具 代码优化实例 内存管理 为什么要...

  • Java基础 (14) 垃圾回收

    1)GC算法(各种算法的优缺点以及应用场景)2)内存对象的循环引用及避免3)内存回收机制、GC回收策略、GC原理时...

  • Javascript 引用计数法的原理和优缺点

    引用计数法是什么? 引用计数法是GC算法之一。GC算法是内存管理中,垃圾回收器完成垃圾回收,从查找垃圾、释放空间到...

  • 【JVM】垃圾回收机制(1)--如何判定对象可以回收

    一 垃圾回收机制概述 也没有规定GC如何工作。不过常用的jvm都有GC,而且大多数GC都使用类似的算法管理内存和执...

  • jvm内存管理--GC算法

    垃圾搜集的算法主要有三种,分别是标记-清除算法、复制算法、标记-整理算法。 标记/清除算法 标记:标记的过程遍历所...

  • javaScript 性能优化(学习笔记)

    内容概要 内存管理 垃圾回收和常见的GC算法 V8引擎的垃圾回收 Performance 工具 代码优化实例 内存...

  • Android内存优化

    GC算法 当内存不足时,系统就会触发GC,GC采用垃圾标记算法为跟搜索算法 从图中可以看书obj4是科大的对象,标...

网友评论

    本文标题:JS 内存管理 GC算法

    本文链接:https://www.haomeiwen.com/subject/gvhxertx.html