当前位置: 首页 > wzjs >正文

内江手机网站建设竞价点击软件工具

内江手机网站建设,竞价点击软件工具,wordpress logo 没了,软件技术好就业吗JavaScript 垃圾回收机制 一、内存的生命周期 在 JavaScript 环境中,内存的一般生命周期如下: 内存分配:当我们声明变量、函数、对象时,系统会自动为它们分配内存。内存使用:即对内存进行读写,也就是使用…

JavaScript 垃圾回收机制

一、内存的生命周期

在 JavaScript 环境中,内存的一般生命周期如下:

  1. 内存分配:当我们声明变量、函数、对象时,系统会自动为它们分配内存。
  2. 内存使用:即对内存进行读写,也就是使用变量、函数等。
  3. 内存回收:使用完毕后,由垃圾回收器自动回收不再使用的内存。

💡 说明

  • 全局变量一般不会被回收,只有在关闭页面或刷新时才被释放。
  • 局部变量在作用域结束后,通常会被自动回收。

二、内存泄漏

内存泄漏是指:程序中分配的内存由于某些原因未被释放或无法释放,导致内存一直被占用。


三、堆和栈的区别(内存分配空间)

区域由谁分配存储内容特点
栈(Stack)操作系统自动分配函数参数、局部变量等基本数据类型生命周期短,效率高
堆(Heap)程序员手动分配(JS中由引擎处理)对象、数组等复杂数据类型生命周期长,需垃圾回收机制

在这里插入图片描述

四、垃圾回收机制 - 引用计数算法

IE 浏览器曾采用 引用计数(Reference Counting) 的垃圾回收算法:

🌟 基本原理:

  • 每个对象有一个引用计数值:
    1. 每当有一个引用指向该对象,计数器 +1。
    2. 每当一个引用被取消,计数器 -1。
    3. 当计数器为 0 时,表示该对象不再被使用,可以被回收。

✅ 示例:

let obj = { name: 'JS' }; // 创建了一个对象 { name: 'JS' } 变量 obj 指向这个对象  此时引用次数 = 1
let ref = obj;            // 引用数为 2
obj = 1;               // obj 不再引用那个对象了 引用次数 = 1(只有 ref 还在指向它)
ref = null;               //ref 也不再指向那个对象 此时引用次数 = 0

但它却存在一个致命的问题:嵌套引用(循环引用)

五 引用计数算法的设计缺陷

如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露。

因为他们的引用次数永远不会是0。这样的相互引用如果说很大量的存在就会导致大量的内存泄露

内存泄漏是指程序中已不再使用的内存未被释放,导致内存持续占用的现象。

你租了一个储物柜(内存),
放进去的东西(变量)用完了,
但你忘了把柜子钥匙还回去(释放内存),
所以柜子一直占着,别人也用不了,
时间久了,整个仓库都塞满了废东西

例子:

function fn()
let o1={}
let o2={}
o1.a=o2//.a只是 对象的属性,它并不需要在对象声明时预先定义o2.a=o1
return '引用计数没法回收'

在这里插入图片描述

六 标记清除法

现代的浏览器已经不再使用引用计数算法了,
现代浏览器通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的。
解决了技术算法的缺陷

核心:
1 标记清除算法将“不再使用的对象”定义为“无法达到的对象”
2 就是从根部(在JS中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的。
3 那些无法由根部出发触及到的对象被标记为不再使用,稍后进行回收。

在这里插入图片描述

🧠 标记清除法的具体步骤

1. 从根开始遍历

根对象通常是全局对象(如 windowglobal),以及当前活跃的变量、函数等。
对这些根对象进行遍历,标记所有可达的对象。

2. 标记所有可达对象

从根对象出发,访问每个可以直接或间接访问到的对象(即通过引用访问的对象)。
被访问到的对象会被标记为“存活”状态。

3. 清除不可达对象

完成标记后,所有没有被标记的对象都可以被认为是垃圾(不可达对象)。
这部分对象会被清除(回收内存)。

let obj1 = { name: 'Alice' };
let obj2 = { name: 'Bob' };
let obj3 = { name: 'Charlie' };// obj1 引用了 obj2
obj1.ref = obj2;// obj2 引用了 obj3
obj2.ref = obj3;// 根对象是 obj1

如果:

obj1 = null;

此时 obj1 被设为 null,它不再引用任何对象。由于 obj1 不再引用任何对象,而 obj2 和 obj3 之间没有外部引用,它们会被视为不可达的对象,从而被清除。

http://www.dtcms.com/wzjs/376613.html

相关文章:

  • 襄阳做网站哪家好网络营销方案设计
  • 建设银行官方网站登录入口品牌营销策划十大要点
  • 网站建设平台硬件要求在线seo超级外链工具
  • 免费网站宣传今日新闻网
  • 全面的手机网站建设seo工作
  • 网站怎么做组织图免费网站的平台
  • 有哪些做实验的参考网站百度号码认证平台个人号码申诉
  • 企业网站建设源码搜索关键词软件
  • 高端企业门户网站建设费用付费推广外包
  • 检测网站建设搜索引擎名词解释
  • 网站sem托管深圳竞价排名网络推广
  • 建设银行网站设置密码神马seo教程
  • 天津网站建设诺亚长沙靠谱seo优化
  • 茶叶电子商务网站建设的结论谷歌搜索引擎入口2023
  • 做网站优化的教程江苏网页设计
  • 甘肃做网站价格推广赚钱平台有哪些
  • 桂电做网站的毕设容易过嘛荥阳网站优化公司
  • 网站建设企业属于什么类型的公司交换友情链接的好处
  • 建行app怎么解除5000限额seo是怎么优化推广的
  • 什么网站上做任务赚钱有没有专门做策划的公司
  • 广州网络营销公司有哪些上海专业的seo公司
  • 海口网站建设加王道下拉中文搜索引擎有哪些
  • 国外专门做图像增强的网站今日新闻最新
  • 厦门b2b网站建设长沙seo优化排名
  • 自己电脑怎么做网站服务器吗网页设计制作网站素材
  • 做网站价位seo排名优化公司哪家好
  • 做调味品批发上哪个网站好seo免费培训
  • css网页设计用什么软件厦门seo排名收费
  • 东莞常平招聘网最新招聘信息seo排名优化工具推荐
  • 好搜360网站打开百度浏览器