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

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

2024-04-02 19:04:59 953人浏览 八月长安
摘要

本篇文章为大家展示了javascript中内存回收机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript语言是一门优秀的脚本语言.其中包

本篇文章为大家展示了javascript中内存回收机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

JavaScript语言是一门优秀的脚本语言.其中包含脚本语言的灵活性外还拥有许多高级语言的特性.例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation).通常我们使用new创建对象,GC负责回收对象占用内存区域.因此了解GC,可以加深对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回收机制还需要近一步了解。在此时引入几个概念:双向链表,作用域链,活动对象(为了方便理解,简化了原文的概念

Javascript闭包(closure) 深入浅出 , 其中双向链表描述复杂对象的上下层级关系. 作用域链与活动对象分别是双向链表中的某个节点.以函数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中内存回收机制的原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网html频道。

--结束END--

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

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

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

猜你喜欢
  • JavaScript中内存回收机制的原理是什么
    本篇文章为大家展示了JavaScript中内存回收机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript语言是一门优秀的脚本语言.其中包...
    99+
    2024-04-02
  • JavaScript内存回收机制的原理是什么
    这期内容当中小编将会给大家带来有关JavaScript内存回收机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.用局部变量和全局变量解释GCGC在回收内存...
    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
  • Java虚拟机中垃圾回收机制的原理是什么
    Java虚拟机中垃圾回收机制的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在Java虚拟机中,对象和数组的内存都是在堆中分配的,垃圾收集器主要回收的...
    99+
    2023-05-31
    虚拟机 垃圾回收机制 java
  • Python内存管理机制的原理是什么
    今天就跟大家聊聊有关Python内存管理机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。小块空间的内存池在Python中,许多时候申请的内存都是小块的内存,这些小块内存...
    99+
    2023-06-17
  • python内存回收机制有什么优点
    Python的内存回收机制有以下几个优点: 自动化:Python的内存回收机制是自动的,程序员无需手动管理内存。Python会在...
    99+
    2023-10-20
    python
  • Python的内存管理和垃圾回收机制
    本篇内容介绍了“Python的内存管理和垃圾回收机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对象的内存使用赋值语句是语言最常见的功能了...
    99+
    2023-06-02
  • PHP 垃圾回收机制与内存管理
    php 的内存管理使用垃圾回收机制,它会在运行时自动释放不再使用的内存,基于引用计数原理运作。为了避免内存泄漏,遵循以下最佳实践:销毁不再需要的变量、避免循环引用、使用弱引用。 PHP...
    99+
    2024-05-03
    php 垃圾回收
  • JavaScript中的垃圾回收机制怎么理解
    今天小编给大家分享一下JavaScript中的垃圾回收机制怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JavaSc...
    99+
    2023-07-06
  • php内存回收机制怎么掌握
    要掌握PHP内存回收机制,可以关注以下几个方面:1. 了解PHP的垃圾回收机制:PHP使用了基于引用计数的垃圾回收机制。当一个变量的...
    99+
    2023-09-06
    php
  • shiro中缓存机制的原理是什么
    本篇文章给大家分享的是有关shiro中缓存机制的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实...
    99+
    2023-05-31
    shiro
  • 详解php内存管理机制与垃圾回收机制
    目录一、内存管理机制二、垃圾回收机制一、内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获...
    99+
    2024-04-02
  • Python中什么是内存管理机制
    本篇文章给大家分享的是有关Python中什么是内存管理机制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的数据类型有哪些python的数据类型:1. 数字类型,包括...
    99+
    2023-06-14
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作