关于js的内存管理和垃圾回收机制的理解

这篇具有很好参考价值的文章主要介绍了关于js的内存管理和垃圾回收机制的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js的内存管理:

内存管理,顾名思义,js在创建变量时,会在内存中分配空间,来储存新增的变量,其中有两种方式,

1:基本类型,系统会在内存中分配实实在在的内存空间,来存放新增的变量,存储的数据结构为栈

2:引用类型,函数,对象等,系统也会在内存中分配空间来储存,存储的数据结构为堆,同时还会在栈中存储堆内对应的地址,指向堆中的对象和函数。

对于栈的内存空间,只保存简单数据类型的内存,由操作系统自动分配和自动释放。而堆空间中的内存,由于大小不固定,系统无法无法进行自动释放,这个时候就需要JS引擎(V8)来手动的释放这些内存。

由于js为解释性语言,所以需要有解释引擎,将js转化为机器语言(越过了字节码),通常我们使用的解释引擎为  V8引擎

V8引擎(关键):

V8引擎是驱动 Google Chrome 的 JavaScript 引擎的名称。是 Chrome浏览器和edge浏览器获取我们的 JavaScript 代码并执行代码的东西。

V8 提供了 JavaScript 执行的运行时环境。 DOM 和其他 Web 平台 API 由浏览器提供。

JavaScript 引擎独立于它所在的浏览器。 这个关键特性促成了 Node.js 的兴起。 早在 2009 年,V8 就被选为驱动 Node.js 的引擎,随着 Node.js 的流行,V8 成为现在为大量使用 JavaScript 编写的服务器端代码提供驱动的引擎。

Node.js 底层代码主要是为C++,这个跟后续内容有关。Node.js生态系统非常庞大,这要归功于 V8,它还支持桌面应用程序,例如 Electron 等项目。

其它JS引擎:

        Firefox 使用 SpiderMonkey

        Safari 使用 JavaScriptCore(也称为 Nitro)

        Edge 最初基于 Chakra,但现在已经使用 Chromium 和 V8 引擎重建。

        等等其它引擎

        所有引擎都采用ECMA ES-262 标准,即 ECMAScript(JavaScript 使用的标准)。

js垃圾回收机制:

js的垃圾回收是自动进行的,程序员无需过多关心,但是编写代码时,应尽量减少闭包和定时器造成的内存泄漏,浪费内存空间。JavaScript有自己的垃圾回收机制,JavaScript的解释器可用检测到何时程序不再使用一个对象,当确定了一个对象无用的时候,就说明不再需要这个对象了,就可用把这个对象所占用的内存释放掉。

标记清除法:

(1)当变量进入执行环境时(函数中声明变量),就标记这个变量为“进入环境”,当变量离开环境时(函数执行结束),则将其标记为“离开环境”,离开环境之后还有的变量则是需要被删除的变量。

(2)垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记。

(3)去掉环境中的变量以及被环境中变量引用的变量的标记。

(4)之后再被加上标记的变量即是需要回收的变量(因为环境中的变量已经无法访问到这些变量)

(5)最后,垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间。
 

引用计数法:

机制就是跟踪一个值的引用次数,当声明一个变量并将一个引用类型赋值给该变量时该值引用次数加1,当这个变量指向其他一个时该值的引用次数便减一。当该值引用次数为0时,则说明没有办法再访问这个值了,被视为准备回收的对象,每当过一段时间开始垃圾回收的时候,就把被引用数为0的变量回收。引用计数方法可能导致循环引用,类似死锁,导致内存泄露。文章来源地址https://www.toymoban.com/news/detail-673884.html

 

到了这里,关于关于js的内存管理和垃圾回收机制的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.6. Java内存管理与垃圾回收

    2.6.1. Java内存模型 在Java中,内存被划分为以下几个区域: 堆(Heap):存储对象实例和数组,是垃圾回收的主要区域。 栈(Stack):存储局部变量和方法调用。每个线程有自己的栈。 方法区(Method Area):存储类信息,如类的结构、方法、字段等。 本地方法栈(Native Method

    2024年02月07日
    浏览(30)
  • 【Java高级应用:深入探索Java编程的强大功能,JVM 类加载机制, JVM 内存模型,垃圾回收机制,JVM 字节码执行,异常处理机制】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:

    2024年01月16日
    浏览(76)
  • 3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

    一篇文章掌握整个JVM,JVM超详细解析!!! JVM (Java虚拟机) 是运行 Java 字节码 的 虚拟机 。 JVM 针对 不同系统 有 特定实现 ( Windows 、 Linux 等),目的是 同样的代码 在 不同平台 能运行出 相同的结果 。 Java 语言 要经过 编译 和 解释 两个步骤: 编译 :通过 编译器 将 代码 一

    2024年02月15日
    浏览(38)
  • JVM | 垃圾回收器(GC)- Java内存管理的守护者

    在编程世界中, 有效的内存管理 是至关重要的。这不仅确保了应用程序的稳定运行,还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一,通过Java虚拟机内部的垃圾回收器组件来自动管理内存,是成为之一的其中一项必不可少的技术点。 在许多传统的编程

    2024年02月09日
    浏览(39)
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(31)
  • 对浏览器垃圾回收机制的理解

    1、垃圾回收的概念      javaScript代码运行的时候,需要分配内存空间来存储变量和值。变量不再参与的时候,就需要系统收回被占用的内存空间,这就是垃圾回收 🌈 回收机制:      ● js具有自动垃圾回收机制,会定期对那些不再使用的变量、对象占用的内存进行释放

    2024年02月14日
    浏览(31)
  • JS垃圾回收机制

    什么是性能优化? 提高运行效率,降低运行开销的行为都可以看做性能优化。 js语言本身的优化,实现编写高效率的代码。 什么是内存管理? 内存:由可读写单元组成,表示一片可操作空间 管理:人为的去操作一片空间的申请、使用和释放 内存管理:开发者主动申请空间

    2023年04月09日
    浏览(71)
  • 记录--JS 的垃圾回收机制

    垃圾回收(Garbage Collection)是一种内存管理机制,用于检测和清理不再被程序使用的内存,这些不再被使用的内存就被称为垃圾。垃圾回收器会在 JS 引擎(浏览器或者 nodejs)内部周期性地运行,一般情况下无需开发者手动操作。 但是,了解垃圾回收机制的工作原理有助于我

    2024年02月12日
    浏览(24)
  • 介绍一下js垃圾回收机制

    JavaScript中的垃圾回收机制负责自动管理内存,回收不再使用的对象所占用的内存空间。在JavaScript中,开发者不需要显式地分配和释放内存,垃圾回收器会自动完成这些操作。 以下是关于JavaScript垃圾回收机制的一些关键概念: 内存生命周期 :JavaScript内存生命周期包括分配、

    2023年04月11日
    浏览(34)
  • [Unity]⭐浅谈Unity内存优化,内存碎片?僵尸内存?以及什么是GC垃圾回收机制。

    目录 🟥 一、什么是内存? 1.物理内存   2.虚拟内存 🟧 二、Unity的内存 1.Unity的内存分类 2.游戏运行时内存占用情况 3.什么是MONO内存? 4.内存碎片、僵尸内存 🟨三、GC 垃圾回收 1.定义 2.一张图清晰得看一下流程~ 3.GC的作用及步骤 4.GC存在的问题及优化策略 🟩 四、内存优

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包