下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

web前端:js 垃圾回收机制

作者:小小_先森     来源: https://www.cnblogs.com/linyabin/archive/2020/03/04/12416095点击数:640发布时间: 2020-03-10 09:03:45

标签: 编程语言计算机C语言

Web开发

  编程语言(programminglanguage),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。

  垃圾回收是编程语言必不可少的环节,当一个变量被定义时,会在系统中分配一个内存来储存变量的值,而当这个变量不在使用的时候就需要对变量进行回收,释放内存。

  如果垃圾不进行回收就会照成内存泄露的情况,内存泄露可能会导致卡顿或者崩溃。

  在编程语言中,C语言需要手动对垃圾进行回收,而javaJavascript系统会自动进行垃圾回收。

  javascript中的垃圾回收机制有两种:

  一、引用计数

  引用计数回收机制是通过对一个值的引用次数进行统计,当这个值被付给一个变量时会给这个值标记为引用一次,如果这个值在被付给另外一个变量,则会给这个变量标记为引用两次。当这个值的引用次数为0时,下次垃圾回收时会把这个值进行回收。

  但是引用计数垃圾回收机制有个问题,就是循环引用,导致垃圾不能被回收。

  functionproblem(){

  varobjectA=newObject();

  varobjectB=newObject();

  objectA.someOtherObject=objectB;

  objectB.anotherObject=objectA;

  }

  problem();

  上面为《JavaScript高级程序设计》中的一个例子。

  当执行problem函数时创建一个objectA变量指向一个空的Object、创建一个objectB变量执行一个空的Object。

  并将objectB的引用赋值给objectA的someOtherObject属性,将objectA的引用赋值给objectB的anotherObject属性。此时两个空对象的引用数量都为2(空对象为newObject()在赋值给objectA时引用计数加1,在赋值给objectB.anotherObject时加1,所以此时objectA所指向的空对象的引用为2,objectB指向的空对象引用次数同理)。

  因此在函数执行结束后objectA和objectB所指向的空对象都不能被回收,如果多次执行problem函数会导致内存中有大量的对象无法被清除。

  所以此垃圾回收机制被浏览器淘汰,各浏览器选择了使用另外一个垃圾回收机制进行垃圾回收--标记清除

  二、标记清除

  标记清除是通过变量进入环境(即在执行预编译的时候将变量放入到作用域中)时对变量进行标记(标记为进入进入),当变量离开环境时又会被标记为离开环境。当垃圾回收时会将内存中的所有变量标记为可回收,然后再将环境中的变量和被环境中变量引用的变量的标记清除,然后对被标记的变量进行销毁和回收。

  编程语言俗称"计算机语言",种类非常的多,总的来说可以分成机器语言、汇编语言、高级语言三大类。电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。

赞(13)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程