zoukankan      html  css  js  c++  java
  • js垃圾回收机制

    1.可达性
    js中内存管理的主要概念就是可达性—以某种方式可访问或可用的值,它们被
    保证存储在内存中
    (1)有一组的固有可达值,由于显而易见的原因无法删除。例如:
    a)本地函数的局部变量和参数
    b)当前嵌套调用链上的其他函数的变量和参数
    c)全局变量
    d)还有一些其他的内部的
    这些值称之为根
    2.如果引用或引用链可以从根访问任何其他值,则认为是该值是可访问的。
    例如,局部变量有对象,并且该对象具有引用另一个对象的属性,则该对象
    被视为可达性,他引用的那些也是可以访问的
    3.垃圾回收算法—”标记-清除“
    (1)垃圾回收器获取根并标记它们。
    (2)然后它访问并标记所有来自它们的引用
    (3)然后它访问标记的对象并标记它们的引用。所有被访问的对象都被记住
    ,以便以后不再访问同一个对象两次。
    (4)以此类推,知道有未访问到的引用(可以从根访问)为止
    (5)除标记对象外,所有对象都被删除
    4.js引擎对于垃圾回收的优化
    (1)分代回收——对象分为两组:“新对象”和“旧对象”。许多对象出现,完
    成它们的工作并迅速结 ,它们很快就会被清理干净。那些活得足够久的对象,
    会变“老”,并且很少接受检查
    (2)增量回收——如果有很多对象,并且我们试图一次遍历并标记整个对象集,
    那么可能会花费一些时间,并在执行中会有一定的延迟。因此,引擎试图将
    垃圾回收分解为多个部分。然后,各个部分分别执行。这需要额外的标记来
    跟踪变化,这样有很多微小的延迟,而不是很大的延迟。
    (3)空闲时间收集——垃圾回收器只在 CPU 空闲时运行,以减少对执行的可能影响。

  • 相关阅读:
    MFC Windows 程序设计>WinMain 简单Windows程序 命令行编译
    AT3949 [AGC022D] Shopping 题解
    CF643D Bearish Fanpages 题解
    CF643C Levels and Regions 题解
    CF241E Flights 题解
    CF671C Ultimate Weirdness of an Array 题解
    CF1592F Alice and Recoloring 题解
    GYM 102452E 题解
    CF494C Helping People 题解
    P5556 圣剑护符
  • 原文地址:https://www.cnblogs.com/Guernicas/p/13262447.html
Copyright © 2011-2022 走看看