调用栈中的数据是如何回收的

  • 原始类型的数据会分配到栈中
  • 引用类型的数据会被分配到堆中
  • 在执行代码的过程中,如果遇到了一个函数,js引擎会创建该函数的执行上下文,并将该函数的上下文压入调用栈中,与此同时,有一个记录当前执行状态的指针(称为ESP),指向调用栈中该函数的执行上下文,表示当前正在执行的函数。
  • 当该函数执行结束之后,js会将esp下移,这个下移操作就是销毁函数执行上下文的过程。
  • 总结:

    js引擎会通过下移ESP来销毁函数保存在栈中的执行上下文。

堆中的数据是如何回收的

  • 要回收堆中的垃圾数据,需要使用js中的垃圾回收器
  • 代际假说
    • 大部分对象在内存中存在的时间很短。( 简单来说,就是很多对象一经分配内存,很快就会变得不可访问 )
    • 不死的对象,会活得更久。
  • 分代理论
    • V8会把堆分为新生代和老年代两个区域,新生代存放的是生存时间短的对象,老生代中存放生存时间久的对象。
    • 新生代通常只支持1-8M的容量
    • 副垃圾回收器:主要负责新生代的垃圾回收
    • 主垃圾回收器:主要负责新生代的垃圾回收
  • 垃圾回收期的工作流程(无论什么垃圾回收器,都有一套共同的执行流程)
      1. 标记空间中活动对象和非活动对象。
      1. 回收非活动对象所占据的内存。
      1. 内存整理。(频繁回收对象后,内存中会有大量不连续空间,称之为内存碎片,需要整理)
  • 副垃圾回收器
    • 主要负责新生区的垃圾回收。(通常情况下,大多数小的对象都会被分配到新生区,所以说这个区域虽然不大,但是垃圾回收很频繁)
    • 用的是Scavenge算法:把新生代空间对半划分为两个区域,一半是对象区域,一半空闲区域

      下次再写

javascript中的垃圾回收机制的一些知识记录的更多相关文章

  1. Javascript中的垃圾回收机制

    Javascript 中的内存管理 译自MDN,Memory Management 简介 在底层语言中,比如C,有专门的内存管理机制,比如malloc() 和 free().而Javascript是有 ...

  2. JavaScript中的垃圾回收机制与内存泄露

    什么是内存泄露? 任何编程语言,在运行时都需要使用到内存,比如在一个函数中, var arr = [1, 2, 3, 4, 5]; 这么一个数组,就需要内存. 但是,在使用了这些内存之后, 如果后面他 ...

  3. JavaScript具有自动垃圾回收机制

    JavaScript具有自动垃圾回收机制 原理: 找出那些不再继续使用的变量,然后释放其占用的内存.   正常的生命周期:     局部变量指在函数执行的过程中存在.而在这个过程中,会为局部变量在栈或 ...

  4. JavaScript中的垃圾回收和内存泄漏

    摘要: JS内存管理. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 程序的运行需要内存.只要程序提出要求,操作系统或者运行时就必须供给内存.所谓的内存泄漏简单来说是不再用到的 ...

  5. 浅谈Chrome V8引擎中的垃圾回收机制

    垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存.垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带 ...

  6. 浅谈V8引擎中的垃圾回收机制

    最近在看<深入浅出nodejs>关于V8垃圾回收机制的章节,转自:http://blog.segmentfault.com/skyinlayer/1190000000440270 这篇文章 ...

  7. JavaScript学习系列6 -- JavaScript中的垃圾回收(内存释放)

    程序开发中,涉及到的内存生命周期基本是一样的,分为以下三步 1. 分配需要的内存 2. 使用分配到的内存 3. 释放其内存    ----什么时候释放内存,以及需要释放哪些变量的内存, 就是垃圾回收机 ...

  8. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  9. Python中的垃圾回收机制

    Python的垃圾回收机制 引子: 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,而变量名是访问到变量值的唯一方式,所以 ...

  10. Java中的垃圾回收机制

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...

随机推荐

  1. 一文详解RocketMQ-Spring的源码解析与实战

    摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑. 本文分享自华为云社区< ...

  2. 实现异步操作CompletableFuture

    多个线程异步操作后统一返回执行结果AtomicReference<RespVo> event = new AtomicReference<>(); AtomicReferenc ...

  3. 为HttpClient开启HTTP/2

    .Net Core在调用其他服务时,调用通常使用HttpClient,而HttpClient默认使用HTTP/1.1 . 配置 HttpClient 以使用 HTTP/2 h2 连接 自 .NET C ...

  4. 机器学习02-(损失函数loss、梯度下降、线性回归、评估训练、模型加载、岭回归、多项式回归)

    机器学习-02 回归模型 线性回归 评估训练结果误差(metrics) 模型的保存和加载 岭回归 多项式回归 代码总结 线性回归 绘制图像,观察w0.w1.loss的变化过程 以等高线的方式绘制梯度下 ...

  5. 突破tls/ja3新轮子

    我之前的文章介绍了SSL指纹识别 https://mp.weixin.qq.com/s/BvotXrFXwYvGWpqHKoj3uQ 很多人来问我BYPass的方法 主流的BYPASS方法有两大类: ...

  6. UIOTOS:一款无门槛的前端0代码搭建工具

    什么是UIOTOS? UIOTOS中文名称前端大师,是一款基于图形技术的前端0代码工具,支持通过连线和嵌套无门槛来搭建各类复杂的的交互界面,包括后台管理系统.组态数据大屏等,实现跟代码开发媲美的效果. ...

  7. 2022-10-27:设计一个数据结构,有效地找到给定子数组的 多数元素 。 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素。 实现 MajorityChecker 类

    2022-10-27:设计一个数据结构,有效地找到给定子数组的 多数元素 . 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素. 实现 MajorityChecker 类 ...

  8. 2022-08-29:以下go语言代码输出什么?A:10 10;B:10 19;C:19 10;D:19 19。 package main import ( “fmt“ ) func he

    2022-08-29:以下go语言代码输出什么?A:10 10:B:10 19:C:19 10:D:19 19. package main import ( "fmt" ) fun ...

  9. 2020-10-27:go中select的执行流程是什么?

    福哥答案2020-10-27: ***[2020-10-27:go中select的执行流程是什么?](https://bbs.csdn.net/topics/398044569)

  10. 2022-02-16:将数组分割成和相等的子数组。 给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) : 0 < i, i + 1 < j, j + 1 < k < n

    2022-02-16:将数组分割成和相等的子数组. 给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) : 0 < i, i + 1 < j, j + 1 & ...