快速理解 JavaScript 的垃圾回收

快速理解 JavaScript 的垃圾回收

前言

JS具有自动垃圾回收机制,换句话说,执行环境会管理代码执行过程中使用的内存。

JS垃圾回收的原理

执行环境会找出那些不再继续使用的变量,然后释放其占用的内存。

立即学习“Java免费学习笔记(深入)”;

JS垃圾回收的策略

标记清除

当变量进入环境时,就将这个变量标记为“进入环境”,而当变量离开环境时,则将其标记为“离开环境”。

标记变量方式看具体的实现,比如可以使用一个“进入环境”的变量列表和一个“离开环境”的变量列表来跟踪哪个变量发生了变化。

使用过标记清除的浏览器有IE,Firefox,chrome。

引用计数

这是一种不太常见的垃圾回收的策略,它就是跟踪每一个值被引用的次数。

当声明了一个变量a并将一个引用类型值({name:’cc’})赋给该变量时,则这个值的引用次数就是1,如果a({name:’cc’})又赋给另一个变量b,则该值的引用次数加1。反之,如果a赋值{name:’xx’},则{name:’cc’}这个值的引用次数减1。当{name:’cc’}这个值的引用的次数变为0时,则说明没有办法再访问{name:’cc’}这个值了,因而可以将其占用的内存空间回收。这样,当垃圾回收器工作的时候,{name:’cc’}这个值占用的内存空间就会被回收。

这种方式曾今被Netscape Navigator 3.0使用过,但是有一个严重问题:循环引用。

function circleReferenceProbem(){  let objectA = new Object()  let objectB = new Object()  objectA.someOtherObject = objectB  objectB.anotherObject = objectA}

登录后复制

执行这个函数后,因为这两个引用值的引用次数永远不会为0,垃圾回收器永远不会回收它们占用的内存空间。

JS垃圾回收器的性能

因为JS垃圾回收器是每隔一个周期就执行一次垃圾回收。

如果为变量分配的内存数量不大的话,那么垃圾回收器的回收工作量就不大。但是,当垃圾回收器的工作量过大的时候,就很可能会出现卡顿的情况。

JS中管理内存的建议

1、尽量少用全局变量

2、尽可能手动清除变量的引用

推荐教程:《JS教程》

以上就是快速理解 JavaScript 的垃圾回收的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2728459.html

(0)
上一篇 2025年3月7日 23:56:12
下一篇 2025年2月26日 10:42:49

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS 基本类型与引用类型值

    引入概念:基本类型和引用类型 1、可以感受到,JS 的变量及其松散,那么,正是 JS 变量松散 的本质,决定了:JS 变量名只是 一个在特定的时间用于保存特定值的一个名字 而已,也就是说,变量的值及其数据类型可以在脚本的生命周期内改变 ,尽…

    2025年3月7日 编程技术
    200
  • JS 中 setTimeout 和 setInterval 区别

    JS中 setTimeout 和 setInterval 区别 setTimeout方法的作用是在指定的毫秒数后执行函数或表达式,而setInterval方法则是在每隔指定的毫秒数循环执行函数或表达式,直到clearInterval方法将其…

    2025年3月7日
    200
  • js中的typeof和instanceof和===的区别

    js中的typeof和instanceof和===的区别 typeof:用于判断number/string/boolean/underfined类型/function,不能判断:null和object ,不能区分object和Array i…

    2025年3月7日
    200
  • js怎么移除css属性

    js怎么移除css的属性? 在工作中,经常需要使用Javascript来改变页面元素的样式。其中一种办法是改变页面元素的CSS类(Class),这在传统的Javascript里,我们通常是通过处理HTML Dom的classname特性来实…

    2025年3月7日
    200
  • js怎么实现字符串转数组

    js怎么实现字符串转数组? js字符串转数组的函数是”split()“,其用法如下 string.split(separator,limit) 登录后复制 参数值 参数描述separator 可选。字符串或正则表达式,从该参数指定的地方分割…

    2025年3月7日
    200
  • js如何实现页面跳转

    js怎么实现页面跳转? js实现页面跳转可以使用“window.location.href=”跳转地址“”方法; 具体用法如下: 首先创建一个html文件填入以下代码: window.location.href = …

    2025年3月7日
    200
  • js怎么清除定时器

    js怎么清除定时器? 在实现清除定时器之前,我们需要开启定时器 一、设置定时器   window对象提供了两个方法来实现定时器的效果,   分别是window.setTimeout()和window.setInterval。其中前者可以使一…

    2025年3月7日
    200
  • JS判断数组中是否包含某个值

    js如何判断数组中某个值? js中判断某个数组中是否含有某个值的函数是”indexOf“,具体用法如下: indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 语法 stringObject.indexOf…

    2025年3月7日
    200
  • JavaScript 和 Dart 的区别

    什么是JavaScript? JavaScript通常被称为浏览器脚本语言,但它也已扩展到许多服务器端和移动应用程序开发环境。JS已经存在了将近20年,可以肯定地说它确实是一种成熟且稳定的编程语言。在Facebook发布React和Reac…

    2025年3月7日
    200
  • 简单实用的进度条加载组件loader.js

    本文提供一个简单的方法实现一个流程的进度条加载效果,以便在页面中可以通过它来更好地反馈耗时任务的完成进度。要实现这个功能,首先要考虑怎样实现一个静态的进度条效果,类似下面这样的: 这个倒是比较简单,两个div即可,bootstrap官方就提…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论