Javascript 垃圾收集机制介绍理解_基础知识
经常使用 Javascript 的人会琢磨其垃圾收集机制,Javascript 并不像 C,C 那样需要开发者手动去清除垃圾,在编写 Javascript 程序是,开发者无需关心内存使用问题,所需内存分配以及无用内存(垃圾)的回收完全实现了自动管理。究其根源,主要是程序收集那些不再使用的变量,并且释放其占用的内存。因此,垃圾收集机制会按照固定时间间隔,周期性反复的执行这一操作。
举例来说,局部变量只存在于函数内部,程序会为局部变量在栈内存或堆内存中分配对应的存储空间,当函数运行结束,局部变量所占用的内存就没有存在的必要了,这时程序会释放局部变量所占用的内存供其他变量使用。这是程序最简单释放内存的方法,但是很多时候,程序中变量会一直被使用,此时垃圾收集机制必须跟踪变量并且判断其是否被使用,是否可以释放其内存空间。
垃圾收集机制主要判断变量释放内存空间的方法有两个:其一是标记清除法,其二是引用计数法。
标记法,每个变量都有其运行环境,变量创建后会在某种环境中运行,比如创建一个局部变量,局部变量会运行在函数体内。当函数运行时,会标记局部变量为“进入环境”,当函数体运行结束后,意味着变量脱离了其运行环境,此时则将变量标记为“离开环境”。对于“离开环境”的变量,垃圾收集机制会进行相应记录,并且在下一个回收周期时将其释放。
引用计数法,跟踪记录每个值的被引用次数。声明一个变量并将一个引用类型值赋给该变量时,这个值得引用次数就是 1。如果同一个值又被赋给另外一个变量,则该值的引用次数加 1。相反,如果包含对这个值的引用的变量又取得另外一个值,这个值得引用次数减 1。当这个值得引用次数为 0 时,则说明没有办法再访问到此值,因此就可以将其占用的内存空间回收。当垃圾收集器在下一个周期运行时,会释放引用次数为零的值所占用的内存空间。(原文解释参考:Javascript 高级程序设计 - 第二版)
举个例子来说:
function countMethod(){
var object1 = new Object(); // 声明变量,计数器由 0 变为 1
var object2 = new Object(); // 声明变量,计数器由 0 变为 1
object1.method1 = object2; // object1 计数器 -1,object2 计数器 1
object2.method2 = object1; // object1 计数器 1,object2 计数器 -1
}
此函数运行退出后,object1 的计数器读数为 1,object2 的计数器度数为 1。所以两个变量都不会被销毁。如果大量的这样的程序存在于函数体内,就会导致大量的内存被浪费而无法回收,从而导致内存的泄露。
上述问题解决方法,手动释放 object1 object2 所占用的内存。即:
object1.method1 = null;
object2.method2 = null;
对比上面的例子,举一个正常情况下的例子。
function countMethod(){
var object1 = new Object(); // 声明变量,计数器由 0 变为 1
var object2 = new Object(); // 声明变量,计数器由 0 变为 1
object1.method1 = "This is object1"; // object1 计数器 -1,object1 读数变为0
object2.method2 = "This is object2"; // object2 计数器 -1,object2 读数变为0
}
通过上例看出,正常情况下,当函数运行结束后,object1 object2的读数均为 0,在下一个垃圾收集周期时,会被回收并且释放其所占用的内存。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

微软在最新的稳定版本中为Windows11/10端的Edge浏览器增添了一个新功能,即“手机上传”。用户现在可以通过Edge浏览器直接从手机上传文件,而且该功能几乎适用于所有网站,没有文件格式的限制。这一功能的引入为用户提供了更加便捷的上传方式,使得在使用Edge浏览器时可以更加高效地管理和分享文件。如何使用“手机上传”功能:打开Edge浏览器,点击任何网站的“上传”选项,然后在文件选择器中选择“从移动设备上传”。使用手机相机扫描二维码。在Edge浏览器点击“确认”配对设备。点击“上传文件”选项

星露谷物语中硬木是一种重要的合成材料,我们在游戏中能够有着很多用途,所以在日常的时候可以囤一下,硬木具体有什么途径能够获得呢,下面就为大家带来星露谷物语硬木获取途径,有需要的话可以参考一下。星露谷物语硬木获取途径1、每天前去秘密森林采掘树桩可以快速获得硬木。2、在秘密森林中采掘树桩和打怪有概率获得桃花心木种籽。3、将种子种在院子中会长出桃花心木。4、最后将桃花心木采掘后也可以快速获得大量硬木。

前言作为热衷于Linux的用户,我们经常遇到在手机上安装CentOS或CentOS7的需求。尽管手机并非最佳Linux运行平台,但有时我们需要在手机上进行一些Linux相关操作或开发工作。在这篇文章中,我们将详细讨论如何在手机上安装CentOS或CentOS7。手机安装CentOS要在手机上安装CentOS,我们首先需要一个支持虚拟化技术的手机,比如支持安卓系统的手机,然后我们可以使用Termux这样的终端模拟器应用来模拟Linux环境,在Termux中,我们可以使用包管理器来安装CentOS的

CSS回流(reflow)和重绘(repaint)是网页性能优化中非常重要的概念。在开发网页时,了解这两个概念的工作原理,可以帮助我们提高网页的响应速度和用户体验。本文将深入探讨CSS回流和重绘的机制,并提供具体的代码示例。一、CSS回流(reflow)是什么?当DOM结构中的元素发生可视性、尺寸或位置改变时,浏览器需要重新计算并应用CSS样式,然后重新布局

随着PHP语言越来越受欢迎,开发人员需要使用越来越多的类和函数。当项目规模扩大时,手动引入所有依赖项将变得不切实际。这时候就需要一种自动加载机制来简化代码开发和维护过程。自动加载机制是一种PHP语言的特性,可以在运行时自动载入所需的类和接口,并减少手动的类文件引入。这样,程序员可以专注于开发代码,减少因繁琐的手动类引入而产生的错误和时间浪费。在PHP中,一般

一些用户在使用电脑的时候,出现了win10系统清理垃圾的情况,当遇到win10系统清理垃圾这种情况,我们应该如何解决呢?如今还有很多用户不知道如何处理win10系统清理垃圾的情况,那么接下来就来看看win10清理系统垃圾的步骤教程,大家一起来看看吧。1、在电脑桌面上,点击“此电脑”,管理。2、选择磁盘管理3、选择你要清理的磁盘,右击选择属性。4、点击页面下方的“磁盘清理”按钮5、在出现的界面中,选择要清理的文件,点击“确定”,点击“删除文件”即可。以上就是win10清理系统垃圾的步骤教程啦,希望

如何在uni-app中实现问卷调查和反馈收集作为一种全面跨平台的开发框架,uni-app在移动应用开发中越来越受欢迎。对于一些需要进行问卷调查和反馈收集的场景,uni-app也提供了丰富的解决方案。本文将介绍如何在uni-app中实现问卷调查和反馈收集,并提供具体的代码示例。一、概述问卷调查是收集用户意见和反馈的一种常见方法,而在uni-app中实现问卷调查

Go语言(也称为Golang)是谷歌开发的一种高效的编程语言,具有并发性和垃圾回收机制等特点。本文将详细解释Go语言中的垃圾回收机制,包括其原理、实现方式以及代码示例。1.垃圾回收原理Go语言的垃圾回收机制是通过“标记-清除”算法实现的。在程序运行过程中,Go运行时会在堆中跟踪哪些对象是可以被访问的(被标记),而哪些对象是无法被访问的,即垃圾数据(需要清除
