返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript内存回收机制的原理是什么
  • 767
分享到

JavaScript内存回收机制的原理是什么

2024-04-02 19:04:59 767人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关javascript内存回收机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.用局部变量和全局变量解释GCGC在回收内存

这期内容当中小编将会给大家带来有关javascript内存回收机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1.用局部变量和全局变量解释GC

GC在回收内存时,首先会判断该对象是否被其它对象引用.在确定没有其它对象引用便释放该对象内存区域.因此如何确定对象不再被引用是

GC的关键所在.

<script>          function aa(){
  •             this.rr = "弹窗";      

  •         }  

  •         function bb(){  

  •         this.rr = "弹窗";  

  •         }  

  •  

  •         var b1;  

  •         function cc(){  

  •             var a1 = new aa();  

  •             b1 = new bb();  

  •                     return b1;  

  •         }  

  •  

  •         cc();  

  •         alert(b1.rr)  

  •     </script> 

  • 如上代码中,执行完cc()后a1被回收了,此后我们可以通过b1.rr弹出文字窗口.在一些基础书籍中解释为:a1为局部变量,b1是全局变量.局部

    变量执行完后会被GC回收.但不全是这样,如下代码:

    <script>          function aa(){              this.rr = "弹窗";              }          function bb(){              this.rr = "弹窗";          }           function cc(){              var a1 = new aa();              var b1 = new bb();                  return b1;          }           var b1 = cc();          alert(b1.rr);      </script>

    此时cc函数中的 a1,b1都是局部变量,但仍然会弹出文字窗口.说明b1并没有被GC回收.因此JavaScript中局部变量不是所有时候都被GC回收的.

    2.抽象理解GC

    GC回收机制还需要近一步了解。在此时引入几个概念:双向链表,作用域链,活动对象(为了方便理解,简化了原文的概念

    [Http://softbbs.pconline.com.cn/9497825.html]) , 其中双向链表描述复杂对象的上下层级关系. 作用域链与活动对象分别是双向链表

    中的某个节点.以函数cc为例变量层级关系为:

    window<=>cc<=>a1<=>rr                          <=>b1<=>rr

    (原文有详细解释)在执行cc()方法时,内存中变量的引用关系如上图,文字解释如下:

    window的活动对象包括cc,假设window是***对象(因为运行中不会被回收)

    cc的活动对象包括a1和b1,其作用域链是window

    a1的活动对象包括rr,其作用域链是cc

    b1的活动对象包括rr,其作用域链是cc

    执行cc()时,cc的执行环境会创建一个活动对象和一个作用域链.其局部变量a1,b1都会挂在cc的活动对象中.当cc()执行完毕后,执行环境

    会尝试回收活动对象占用的内存.但因局部变量b1 通过return b1,为其增加了一条作用域链:window<=>b1<=>rr,所以GC停止对b1回收.

    因此如果想将一个局部变量/函数提升为全局的,为其增加一条作用域链就OK了。

    同时控制好对象的作用域链也变得重要了.因作用域链会意外导致GC无法回收目标对象.例如:

    <SCRIPT LANGUAGE="JavaScript">        <!--      //猫      function cat(name){          var zhuren ;          this.name = name;                    //设置主人          this.addZhuRen = function(zr){              zhuren = zr;          }           this.getZhuRen = function(){              return zhuren;          }      }            //主人      function zhuren(name){          this.name = name;      }       //创建主人:      var zr = new zhuren("zhangsan");      //创建猫      var cat1 = new cat("asan");      //设置该猫的主人      cat1.addZhuRen(zr);      //释放主人      zr = null ;      //此处还存在对主人对象的引用      alert(cat1.getZhuRen().name)        //-->    </SCRIPT>


上述就是小编为大家分享的JavaScript内存回收机制的原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网node.js频道。

--结束END--

本文标题: JavaScript内存回收机制的原理是什么

本文链接: https://lsjlt.com/news/66352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript内存回收机制的原理是什么
    这期内容当中小编将会给大家带来有关JavaScript内存回收机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.用局部变量和全局变量解释GCGC在回收内存...
    99+
    2024-04-02
  • JavaScript中内存回收机制的原理是什么
    本篇文章为大家展示了JavaScript中内存回收机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript语言是一门优秀的脚本语言.其中包...
    99+
    2024-04-02
  • qt内存回收机制是什么
    Qt内存回收机制是通过自动垃圾回收(Garbage Collection,GC)和对象树(Object Tree)来实现的。在Qt中...
    99+
    2023-09-16
    qt
  • php内存回收机制是什么
    PHP的内存回收机制主要包括两个方面:引用计数和垃圾回收。1. 引用计数:PHP使用引用计数来跟踪内存中对象的引用数量。当一个对象被...
    99+
    2023-08-24
    php
  • Java内存分配与回收机制是什么
    本篇内容介绍了“Java内存分配与回收机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.运行时数据区域下图是Java虚拟机运行时的...
    99+
    2023-06-03
  • Java垃圾回收机制的原理是什么
    本篇内容主要讲解“Java垃圾回收机制的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java垃圾回收机制的原理是什么”吧!Java 垃圾回收机制1. 垃圾回收主要关注 Java 堆图...
    99+
    2023-06-15
  • jvm垃圾回收机制的原理是什么
    JVM(Java虚拟机)的垃圾回收机制是自动管理内存的一种机制,它通过识别和释放不再被程序使用的对象,以防止内存泄漏和内存溢出等问题...
    99+
    2023-09-25
    jvm
  • js垃圾回收机制的原理是什么
    这篇“js垃圾回收机制的原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“js垃圾回收机制的原理是什么”文章吧。前言大...
    99+
    2023-06-27
  • Python垃圾回收机制的原理是什么
    Python的垃圾回收机制是自动进行的,它基于引用计数的原理以及循环垃圾收集。 引用计数:Python中的每个对象都有一个引用计...
    99+
    2023-10-20
    Python
  • PHP的垃圾回收机制的原理是什么
    这篇文章将为大家详细讲解有关PHP的垃圾回收机制的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP的基本GC概念PHP语言同其他语言一样,具有垃圾回收机制。那么今天我们要为大家...
    99+
    2023-06-17
  • 【redis】内存回收机制
    https://blog.csdn.net/tr1912/article/details/81267910...
    99+
    2021-02-15
    【redis】内存回收机制
  • Android内存回收机制
    Android内存回收机制策略 1、GC 2、lowmemorykiller GC GC是java虚拟机的内存回收机制。Android GC原...
    99+
    2022-06-06
    Android
  • AS3 内存回收机制
           AS3相对于以前版本的功能增强了很多,在赋予它重任时,同时也要它付出代价:垃圾收集器不再支持自动为你收集垃圾。本文中,我为大家整理了一些资料。首先,我们先来了解下垃圾收集器是个什么东西?             (1)关于垃...
    99+
    2023-01-31
    机制 内存
  • Python内存管理机制的原理是什么
    今天就跟大家聊聊有关Python内存管理机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。小块空间的内存池在Python中,许多时候申请的内存都是小块的内存,这些小块内存...
    99+
    2023-06-17
  • python内存回收机制有什么优点
    Python的内存回收机制有以下几个优点: 自动化:Python的内存回收机制是自动的,程序员无需手动管理内存。Python会在...
    99+
    2023-10-20
    python
  • Java虚拟机中垃圾回收机制的原理是什么
    Java虚拟机中垃圾回收机制的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在Java虚拟机中,对象和数组的内存都是在堆中分配的,垃圾收集器主要回收的...
    99+
    2023-05-31
    虚拟机 垃圾回收机制 java
  • Python的内存管理和垃圾回收机制
    本篇内容介绍了“Python的内存管理和垃圾回收机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对象的内存使用赋值语句是语言最常见的功能了...
    99+
    2023-06-02
  • PHP 垃圾回收机制与内存管理
    php 的内存管理使用垃圾回收机制,它会在运行时自动释放不再使用的内存,基于引用计数原理运作。为了避免内存泄漏,遵循以下最佳实践:销毁不再需要的变量、避免循环引用、使用弱引用。 PHP...
    99+
    2024-05-03
    php 垃圾回收
  • php内存回收机制怎么掌握
    要掌握PHP内存回收机制,可以关注以下几个方面:1. 了解PHP的垃圾回收机制:PHP使用了基于引用计数的垃圾回收机制。当一个变量的...
    99+
    2023-09-06
    php
  • 详解php内存管理机制与垃圾回收机制
    目录一、内存管理机制二、垃圾回收机制一、内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作