js垃圾回收(引用计数算法、标记清除算法、v8垃圾回收机制、浏览器性能监控、任务管理器、内存分析、JSBench)

news2025/1/21 4:59:22

目录

垃圾

可达对象

GC算法(垃圾回收机制)

引用计数算法

优点

缺点

标记清除算法

优点

缺点

标记整理算法

优点

缺点

V8

V8垃圾回收

新生代对象回收 

晋升条件

老生代对象回收

性能监控Performance

浏览器任务管理器

内存分析

​编辑

JSBench(代码测试网站)


垃圾

对象不再被引用时是垃圾;

对象不能从根(全局)上访问到时是垃圾;

可达对象

在一个作用域链上,只要通过根可以有路径查找到的对象都是可达对象。

可以访问到的对象就是可达对象(可以通过引用、作用域链查找到)
可达的标准就是从根(全局)出发是否能够被找到
 

GC算法(垃圾回收机制)

GC是一种机制,垃圾回收器完成具体的工作。工作的内容就是查找释放空间、回收空间。算法就是工作时查找和回收所遵循的规则。

引用计数算法

设置引用数,判断当前引用数是否为0。

优点

可以即时回收垃圾对象。

减少程序卡顿时间。

缺点

无法回收循环引用的对象

时间开销大

标记清除算法

分标记和清除二个阶段完成

遍历所有对象找标记活动对象(非垃圾)。

遍历所有对象清除没有标记对象。

优点

可以解决引用计数中的循环引用的问题。

缺点

容易产生碎片化空间,不能得到最大化利用。

不会立即回收垃圾对象。

标记整理算法

可以看做是标记清除的增强;

标记阶段的操作和标记清除一致

清除阶段会先执行整理,移动对象位置(整理对象使垃圾被释放后空间连续)

优点

减少碎片化空间。

缺点

不会立即回收垃圾对象。

V8

一款主流JavaScript执行引擎,采用即时编译,内存设限(64位操作系统为1.5G,32位操作系统为800MB )

V8垃圾回收

V8将内存空间一分为二,新生代对象(存活时间较短的对象)存储区(被分为From和To两个等大小空间)和老生代存储区,如下图:

 回收过程采用复制算法+标记整理。

新生代对象回收 

活动对象存储于From空间,标记整理后将活动对象拷贝至To,From与To交换空间完成释放。

拷贝过程中可能出现晋升(将新生代对象移动至老生代)

晋升条件

一轮GC还存活的新生代需要晋升

To空间的使用率超过25%需要晋升

老生代对象回收

主要采用标记清除、标记整理、增量标记算法。

首先使用标记清除完成垃圾空间的回收。

当新生代对象晋升且老生代空间不足时会采用标记整理进行空间优化。

增量标记用于进行效率优化。

性能监控Performance

google浏览器控制台下的performance板块,可以录制交互或页面加载过程的性能变化。 

浏览器任务管理器

使用Shift+Esc打开,在该面板上右击鼠标可以选择需要显示的内容例如JavaScript使用过的内存。

上图中内存占用空间表示DOM节点所占据的大小;

JavaScript使用的内存表示为为js中的堆大小,括号中的大小为所有可达对象当前使用的大小。

内存分析

 

JSBench(代码测试网站)

JSBench.me - JavaScript performance benchmarking playground

JavaScript代码执行快慢测试网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Doris 系列: 基础篇-BitMap索引

1. 测试数据准备 本文使用SSB(Star-Schema-Benchmark)的测试数据,读者也可以自行准备测试数据 1.1 编译ssb-dbgen 数据生成工具 ## 拉取Apache Doris源代码 git clone https://github.com/apache/doris.git## 编译ssb-dbgen cd doris/tool…

计算机网络复习之应用层

统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。它最初是由蒂姆伯纳斯李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738。邮局协议(Post Office Protoco…

TDemo 备注文本的二种存贮方式

TDemo 备注纯文本的二种存贮方式 数据库使用过程中,对于TDeme控件,对应数据库的分为nvarchar(n)类型字段。 一、通常使用二种格式的文本: (1)单纯文本 (2)带换行符的文本 这二种格式&#xff0c…

Pdf 转换成Word如何在线转换?职场公认好用软件推荐

Pdf 转换成Word如何在线转换?生活中很多时候我们需要接触大量的办公文件,特别是利用office的三种常见的文件格式编辑各类文件,最常见的便是Word文件操作。为了更方便我们进行文件传输,大部分情况下我们会把格式排版完好的Word文档…

UDS诊断系列介绍08-19服务

本文框架1. 系列介绍1.1 19服务概述1.2 DTC故障码定义1.3 DTC状态位2. 19服务常用子服务2.1 19 01服务2.2 19 02服务2.3 19 04服务2.4 19 06服务2.5 19 0A服务2.6 否定响应3. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议…

Android 深入系统完全讲解(15)

4 权限相关的知识 1 安卓权限 上层 APK 权限获取方式,配置 AndroidManifest.xml,系统会对应的给 gid,在创建进程的时候就带下去,这样子就可以访问对应的设备。 而系统相关的,会限制必须是 uidsystem 这类&#xff0c…

一年融资三轮,一文读懂亿格云这家公司

数字办公时代,网络安全是企业经营的底线工作。如何构建一个安全、稳定、高效的网络安全体系,是企业谋求发展的基础条件之一。近年,倡导“永不信任,始终验证”的零信任网络安全服务理念开始兴起。而国内致力于基于零信任理念构建办…

MySQL 行级锁(行锁、临键锁、间隙锁)

行级锁 行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。 InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 1…

类和对象(上)

文章目录引用autoNULL&nullptr&0类和对象类的实例化默认成员函数构造函数析构函数拷贝构造函数运算符的重载赋值运算符的重载拷贝构造次数编译器优化前置后置> < ! - -const成员operator>>&&operator<<再谈构造函数初始化列表初始化expli…

使用Hi3861开发环境搭建

安装ubuntu ​ 文件夹的位置尽量选一个空间比较大的 内存也尽量分配大一点&#xff0c;不要到红色区域就行 固定分配&#xff0c;如果给它100G空间&#xff0c;他就会把这100G空间全部使用掉&#xff0c;动态分配&#xff0c;即使你给他100G内存&#xff0c;但实际使用的空间…

【自学Docker】Docker入门

Docker入门 Docker简介 Docker 是 Docker.Lnc 公司开源的一个基于 LXC 技术之上搭建的 Container 容器引擎&#xff0c;Docker 源代码托管在 Github上&#xff0c;Docker 是基于 Go 语言开发的并遵从 Apache2.0 协议开源。 Docker 属于 Linux 容器的一种封装&#xff0c;提供…

(十九)包装类

前言: 在我们讨论其他变量类型之间的相互转换时&#xff0c;我们需要了解一下Java的包装类&#xff0c;所谓包装类&#xff0c;就是能够直接将简单类型的变量表示为一个类&#xff0c;在执行变量类型的相互转换时&#xff0c;我们会大量使用这些包装类。Java共有六个包装类&…

pandas数据结构

文章目录Series创建series对象Series对象的属性DataFrame创建DataFrame对象Python 在数据处理上独步天下&#xff1a;代码灵活、开发快速&#xff1b;尤其是 Python 的 Pandas 包&#xff0c;无论是在数据分析领域、还是大数据开发场景&#xff0c;都具有显著的优势。Series S…

CesiumLab实例模型切片 CesiumLab系列教程

先解释下实例模型&#xff0c;实例模型使用 GPU instance 技术来渲染的模型&#xff0c;通常用来绘制大量几何体一致&#xff0c;但是位置姿态不同的对象&#xff0c;比如说森林场景&#xff0c;大量路灯&#xff0c;井盖等&#xff0c;如下图&#xff1a; 1.输入文件 目前输入…

【图文教程】Centos单机安装Redis

1.1.安装Redis依赖 Redis是基于C语言编写的&#xff0c;因此首先需要安装Redis所需要的gcc依赖&#xff1a; yum install -y gcc tcl1.2.上传安装包并解压 ​ 例如&#xff0c;凯哥将其放到了/usr/local/src 目录&#xff1a; 解压缩&#xff1a; tar -xzf redis-6.2.6.tar…

搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

网页可见区域高:document.body.clientHeight 网页正文全文高:document.body.scrollHeight 网页可见区域高&#xff08;包括边线的高&#xff09;&#xff1a;document.body.offsetHeight 网页被卷去的高&#xff1a;document.body.scrollTop 屏幕分辨率高&#xff1a;window.sc…

SpringBoot实践(三十九):如何使用AOP

目录 直接使用Aspect 定义切面逻辑 模拟业务代码 测试输出 自定义注解方式 自定义切面注解 定义切入点逻辑 模拟业务代码 测试输出 面向切面&#xff08;AOP) 是spring重要特性&#xff0c;在功能上切面编程是面向对象编程的很好的补充&#xff0c;面向对象强调封装和开…

BAT 名企大厂做接口自动化如何高效使用 Requests ?

1080428 28.9 KBRequests是一个优雅而简单的python HTTP库&#xff0c;其实python内置了用于访问网络的资源模块&#xff0c;比如urllib&#xff0c;但是它不如requests简单&#xff0c;优雅&#xff0c;而且缺少许多实用功能。接下来的接口测试的学习和实战&#xff0c;都与re…

语音识别系列之基于CTC的VAD

语音活动性检测&#xff08;Voice Activity Dection, VAD&#xff09;常作为语音识别系统的前端模块过滤非语音段&#xff0c;为后续增强模块提供语音/非语音判据&#xff0c;从而更好的掌握背景噪声特性&#xff0c;进而提升降噪量&#xff0c;保证识别性能&#xff0c;且能降…

GitHub进阶使用指南

GitHub进阶使用指南1.个性化 Github 首页2.自定义项目徽章3.自动为项目添加贡献情况图标4.高效阅读 Github 项目的源代码5.扩展 Github 的功能1.个性化 Github 首页 Github 目前支持在个人主页自定义展示一些内容&#xff1a; 想要做到这样非常简单&#xff0c;你只需要创建一…