JavaScript的垃圾回收机制

js的新生代垃圾回收知识点总结 在进行老生代的标记清除法回收以前,还会有一个新生代的垃圾回收算法执行。 新生代和老生代 所谓新生代,指的是新产生的对象;老生代就是经历过新生代垃圾回收后还“存活”下来的对象。 新生代的垃圾回收算法 Scavenge GC 算法很简单: 1. 我们维护一个列表,老生代对象每次指向一个新生对象的时候,记录下来;每次删除指向的时候,删除记录。(这样我们就知道新生代对象里面,哪些对象是存活的了) 2. 我们把新生代对象的内存平均分开 2 份空间From 和 To 3. 每当有新生对象诞生,就会在 From 空间出现 4. 一旦 From 空间被占满,就触发 Scavenge GC 5. 根据维护的列表 立即下载

http://www.cnblogs.com/jenry/archive/2011/02/13/1953265.html



JavaScript的垃圾回收机制

JavaScript语言是一门优秀的脚本语言。其中包含脚本语言的灵活性外还拥有许多高级语言的特性。例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation)。通常我们使用new创建对象,GC负责回收对象占用内存区域。因此了解GC,可以加深对javascript垃圾回收机制的理解。

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

复制代码
    
< script type = " text/javascript " >
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 type = " text/javascript " >
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回收的。

GC回收机制还需要近一步了解。在此时引入几个概念:双向链表,作用域链,活动对象(为了方便理解,简化了原文的概念[http://softbbs。pconline。com。cn/9497825。html]) , 其中双向链表描述复杂对象的上下层级关系。 作用域链与活动对象分别是双向链表中的某个节点。以函数cc为例变量层级关系为:

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

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

  1. cc的活动对象包括a1和b1,其作用域链是window
  2. cc的活动对象包括a1和b1,其作用域链是window
  3. a1的活动对象包括rr,其作用域链是cc
  4. 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>
复制代码

基于紫光同创FPGA的adf网表文件使用和黑匣子设置 这个时候就可以选择将你的网表文件给到他使用,就是相当于把你的功能模块封装成了一个黑匣子一样,只有外部端口,没有内部代码;,在TOP层的子模块声明里面需要加上/*synthesis syn_black_box */进行黑匣子设置,此时子层 adf 文件作为黑盒是不会综合的,在 device map 时会将顶层综合结果与子层 adf 文件合并传递至布局布线阶段;这些都设置完毕后呢,就可以对工程进行编译和综合了,综合完毕后会生成一个.adf的网表文件,我们要使用的就是这个文件;我这里是把两个子模块的添加了哈; 阅读详情

相关推荐

vasp-自旋轨道耦合(SOC)计算步骤

在VASP中执行自旋轨道耦合(SOC)计算,具体的计算步骤如下: 结构优化获取CONTCAR文件 自洽计算(collinear normal VASP calculations)获取IBZKPT,CHGCAR和WAVECAR文件。 SCF+SOC计算,在此步骤中,将步骤2中的IBZKPT复制为KPOINTS,以便两个步骤具有相同的k网格,因此可以读取步骤2中的CHGCAR和WAVECAR文件。 能带结构计算,在此步骤中,将KPOINTS改为高对称点,读取步骤3中的CHGCAR和WAVECAR文件。

懒散的鱼与消失的猫 3万+

JavaScript垃圾回收机制

在JavaScript中,垃圾回收(Garbage Collection)是一种自动内存管理机制,它可以自动地识别不再使用的变量和对象并将它们从内存中清除,以释放内存空间。

杨树林er的博客 8822

半导体测试(一)

探针台是一种用于在晶圆上进行配合探针卡进行电路量测的设备,在测试过程中,探针工作站会将探针与晶圆上的每个die进行接触,以进行电性测量。在这个过程中,每个die都被测试以确保它能基本满足器件的特征或设计规格书(Specification),通常包括电压、电流、时序和功能的验证。晶圆是一个圆形的硅片,在这个半导体的基础之上,建立了许多独立的单个的电路;在所有的die都被探测(Probed)之后,晶圆被切割成独立的dice,这就是常说的die saw,所有被标示为失效的die都被报废,。

m0_37606066的博客 8424

【JavaScript】垃圾回收机制详解

在编程语言中,内存管理是一个非常重要的方面。JavaScript 作为一种高级语言,开发者不需要手动管理内存的分配和释放。垃圾回收机制是 JavaScript 引擎中的一部分,负责自动回收那些不再被使用的内存,确保内存资源得到有效利用,避免内存泄漏。简单来说,当程序中某些对象不再被引用时,这些对象所占用的内存就会被视为“垃圾”,垃圾回收器会负责释放这些内存,使其可以被重新利用。JavaScript 的垃圾回收机制是自动内存管理的重要组成部分,它通过回收不再使用的对象来保证程序的内存使用效率。

lph159的博客 4035

从零开始:使用Labelme完成图像语义分割标注全流程

本文详细介绍了如何使用Labelme工具完成图像语义分割标注的全流程,从环境安装、数据准备到核心标注操作,并重点讲解了如何将标注结果转换为PASCAL VOC等深度学习框架可用的标准数据集格式。文章还提供了关键的避坑指南和高效技巧,帮助初学者快速上手,高效产出高质量的标注数据。

weixin_29073241的博客 491

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 305

JS垃圾回收机制

新生代的对象为存活时间较短的对象,即新产生的对象,通常只支持1~8M的容量,而老生代的对象为存活时间较长或常驻内存的对象,即经历过新生代垃圾回收后还存活下来的对象,容量通常比较大。当我们的内存能够使我们流畅的运行代码,其实我们是没有必要进行清理内存的,它会稍稍延迟一下清理过程,也无需一次性清理完所有非活动对象内存,可以按需逐一进行清理直到所有的非活动对象都清理完毕。它的标记阶段和标记清除算法没有什么不同,只是标记结束后,标记整理算法会将不需要清理的对象向内存的一端移动,最后清理掉边界的内存。

x0926的博客 2320

黏菌优化算法(SMA)详解:从生物智能到优化引擎

黏菌优化算法(SMA)是一种新型生物启发式优化算法,模拟多头绒泡菌的智能觅食行为。该算法包含接近食物、包围食物和抓取食物三个阶段,通过数学模型将生物行为转化为优化过程。SMA采用权重自适应机制和参数振荡模型实现探索与开发的平衡,具有参数简单、收敛性好等优势。算法可通过MATLAB/Python实现,并应用于函数优化、工程设计和神经网络训练等领域。研究表明SMA在求解复杂优化问题时表现优异,未来可通过混沌增强、混合策略等方式进一步提升性能。

qq_42212808的博客 659

js垃圾回收

js垃圾回收

weixin_49021723的博客 462

VTsystem背景检查函数Value Valid

Value Valid是个非常实用的函数,如何让它灵活的为我们所用,便是本文的内容。

欢迎来到eee的博客 793

MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)

MIKE 21 教程 手把手教学系列 1.1 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具) ​ 上一篇文章讲解了如何创建基本的点、线、面要素 MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 本节来讲一下对点线面要素的高阶处理,主要包括要素修改与打断线(break line)的讲解 ​

Hello Word 4148

JS | 深入谈谈 JavaScript 的垃圾回收机制

垃圾回收机制也称Garbage Collection简称GC。在JavaScript中拥有自动的垃圾回收机制,通过一些回收算法,找出不再使用引用的变量或属性,由JS引擎按照固定时间间隔周期性的释放其所占的内存空间。在C/C++中需要程序员手动完成垃圾回收。

青春木鱼的博客 2201

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

「JavaScript深入」谈谈 JS 的垃圾回收机制

谈谈JS的垃圾回收机制:内存管理、可达性、内存回收机制、V8对于垃圾回收机制的优化

XH_jing的博客 1377

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JS—垃圾回收机制:5分钟掌握Java和JavaScript垃圾回收机制

因为我是Android出身,当初学的Java语言,对Java的垃圾回收机制比较熟悉。并且,JavaScript V8引擎的垃圾回收机制与Java的垃圾回收机制类似。这里的士兵可以看作一个对象,入伍就是被new出来了,退伍就是被gc回收了。具体的算法实现不同。说到垃圾回收机制,就想到之前Android的java的垃圾回收机制,),这个时候,就需要大清洗了,新兵营,军管区都需要清理,给人空出位置来(我就不像说Java的垃圾回收机制那样,说的那么细了。),士兵无法晋升了,就要搞事情了,需要清理那些不干事的军官(

海晨忆的博客 1074

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【javascript】js中的垃圾回收机制

前言 js中的自动垃圾回收机制让我们可以不用关心内存管理,但在一些情况下会导致内存泄漏,js中的垃圾收集机制主要有两种方式。 1.引用计数垃圾收集 在内存管理的环境中,一个对象如果有访问另一个对象的权限(隐式或者显式),叫做一个对象引用另一个对象。 例如,一个Javascript对象具有对它原型的引用(隐式引用)和对它属性的引用(显式引用)。 在这里,“对象”的概念不仅特指 JavaScript ...

Alexbyy的博客 1143

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JavaScript垃圾回收机制详解

垃圾回收机制的目标是自动识别和回收不再被使用的内存,以防止内存泄漏。在JS中,变量和对象的生命周期包括声明、赋值、使用和释放四个阶段。当变量或对象不再被使用时,垃圾回收机制会将其占用的内存释放。

qq_63447955的博客 1714

JavaScript-JS引擎的垃圾回收机制

本文介绍了JavaScript的内存管理机制,重点分析了V8引擎的内存限制原因和垃圾回收策略。JavaScript的基本数据类型存储在栈内存,而引用数据类型存放在堆内存并由垃圾回收机制管理。V8引擎因浏览器应用场景和性能平衡考虑,对内存使用进行了限制(64位系统1.4GB,32位0.7GB)。文章详细阐述了三种垃圾回收算法:引用计数(简单但存在循环引用问题)、标记清除(可靠但会暂停程序)和分代回收(结合前两者优点)。针对回收效率问题,V8采用增量标记、懒性清理、并发/并行等优化技术。新生代使用Scaveng

m0_56222987的博客 619

『Javascript基础重点』4.JS垃圾回收机制简析

『Javascript基础重点』4.JS垃圾回收机制简析

MZH 357

Javascript基础:垃圾回收机制

Javascript垃圾回收机制 一、什么是内存泄漏? 程序的运行需要内存,当程序提出要求,操作系统就会供给内存。对于不再用到的内存,没有及时释放,就叫做内存泄漏。 对于持续运行的服务进程,必须及时释放内存,否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。 二、什么是垃圾回收机制? JavaScript具有垃圾收集器,垃圾收集器会按照固定的时间间隔周期性的执行。 最常见的垃圾回收方式有两种: 标记清除 引用计数 1.标记清除: 原理:是当变量进入环境时,将这个变量标记为“进入环境”。当变量

imagine_tion的博客 5906
上一篇: javascript深入理解js闭包
下一篇: JavaScript 多种方法实现类
小瑞
博客等级 码龄19年 240粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值