浅谈垃圾回收机制

article/2025/9/19 13:43:22

目录

前言:

1.标记清除(主要)

2.引用计数(次要)

3.一些注意的点


前言:

JavaScript的垃圾回收机制是为了防止内存泄漏的,所谓的内存泄漏是指当已经不需要某块内存时这块内存还存在着,而垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。

举个例子:我写了一个函数,在这个函数里面我声明了一个局部变量,那么当这个函数运行完了其实这个变量我们就不需要了,我们不会在乎这个变量还存不存在,反正我们已经用完了。那么如果这个变量我们实实在在的不用了但是它却不能被回收,为什么不能被回收呢?因为内存泄漏了,下一篇文章我会详细聊聊内存泄漏的问题。

1.标记清除(主要)

先明确一个点,是谁在回收,即,谁是垃圾回收的主体?答案是JavaScript。

有两种垃圾回收机制,标记清除和引用计数,先说说标记清除。

当变量进入执行环境的时候,比如说函数声明一个变量,那么这个时候变量被标记为“进入环境”,当函数执行结束后,变量被标记为“离开环境”,也就是说函数运行完了,这个变量也就被清理了。

然后,对于JavaScript来说,它的执行是,给内存中中的所有变量打上标记(可理解为我要删除得有个名单),先除去正在运行的变量,可理解为这个函数正在执行中,还有就是闭包,可理解为这个变量正在被引用(使用),除了这两个情况,其他的就会被回收。

 


2.引用计数(次要)

这个方式很简单,意思是说我要跟踪记录这个变量的引用次数,当它变成0的时候就被清理。

具体的规则如下:

比方说我声明一个变量,将一个引用类型(如对象)赋值给该变量的时候这个值的引用次数加一,如果这个变量的值变成另外一个,那么这个引用次数减一,当这个值的引用次数为0的时候,说明没有变量被使用了,于是这个值就被回收掉了


3.一些注意的点

BOM和DOM是通过引用计数回收垃圾的,也就是说只要涉及BOM和DOM就会出现循环引用的问题


http://chatgpt.dhexx.cn/article/dacrkNPT.shtml

相关文章

通过图文给你讲明白java GC的垃圾回收机制

本文原链接 http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 1. JAVA GC 概述 JAVA GC采用了分代思想,将java堆分成新生代,年老代,永久代。GC算法主要有标记-清除,标记-压缩,复制算法。 新生代…

jvm垃圾回收是什么时候触发的? 垃圾回收算法? 都有哪些垃圾回收器

1.1。那究竟GC为我们做了什么操作呢? 1 ,哪些内存需要回收? 2 ,什么时候回收? 3 ,如何回收? 这时候有人就会疑惑了,既然GC 已经为我们解决了这个矛盾,我们还需…

Java回收垃圾的基本过程与常用算法

目录 一、基本概述 二、垃圾分类 基本背景 举例说明各种引用类型的作用 强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference&#xff…

java面试-GC垃圾回收机制

原理: GC是垃圾收集的意思(Garbage Collection),Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。 简而言之,GC是将java的无用的堆对象进行清理,释放内存,以免发生内存泄露。…

JVM垃圾回收算法、GC和分代回收、三色标记并发漏标、垃圾回收器

一.标记清除 标记速度与存活对象线性关系 清除速度与内存大小线性关系 标记清除法分为标记阶段和清除阶段,标记阶段首先找到一些GC Root对象(根对象),根对象是那些一定不能被回收的对象。清除阶段比较简单,加标记的对…

垃圾回收的主要区域是堆,那方法区会回收吗?

有些人认为方法区(如HotSpot虚拟机中的元空间或者永久代)是没有垃圾收集行为的,《Java虚拟机规范》中提到过可以不要求虚拟机在方法区中实现垃圾收集,事实上也确实有未实现或未能完整实现方法区类型卸载的收集器存在(如…

GC(垃圾回收)详解

JVM 1.年轻代:年轻代主要存放新创建的对象,垃圾回收会比较频繁。(稍微讲细一点就是即可,年轻代分成Eden Space和Suvivor Space。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Spac…

java---垃圾回收算法(GC)

目录 一、如何判断一个对象是否存活 1.引用计数法 2.可达性分析法 二、垃圾回收算法 1.标记清除法 2.复制算法 3.标记整理法 4.分代算法 具体流程 注意事项 空间分配担保原则 总结 一、如何判断一个对象是否存活 Java 堆中存放着几乎所有的对象实例,垃圾…

Java - GC 垃圾回收

JVM中一个垃圾回收线程,它的优先级较低,正常情况下不会执行。JVM空闲或者当前内存不足时,才会触发垃圾回收线程执行,扫描内没有被引用的对象,将这些对象添加到要回收的集合中进行回收。 GC介绍 Garbage Collection 垃圾收集,监测对象是否可…

GC是如何判断一个对象为垃圾的?被GC判断为垃圾的对象一定会被回收吗?

一.GC如何判断一个对象为”垃圾”的 java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。那么GC具体通过什么手段来判断一个对象已经”死去”的? 1.引用计数算法(…

基于28181协议的视频与平台的对接

问题描述 将IPC摄像头接入平台进行观看,或使用28181/rtsp/rtmp/flv等协议将视频流分发到其他平台。 解决方案 WVP-PRO(基于GB/T 28181-2016标准实现的流媒体平台),依托优秀的开源流媒体服务ZLMediaKit,提供完善丰富…

GB28181协议实现系列之----SDK Demo发布(7)

GB28181在终端的应用越来越广,但是一般很多做终端的厂家要加入到互联互通的GB28181网络协议栈中都必须招聘一些专业做GB28181的开发人员,并且需要对接各厂家的兼容性开发及对接调试工作,或是修改一些定制功能。安防市场一年有千亿以上的产值&…

GB28181协议之设备录像查询

目录 一、概述 二、GB28181录像文件查询 2.1 录像文件基本要求 2.2 命令流程 2.3 抓包文件抓图示例 三、国标平台介绍 一、概述 近年来,国内视频监控应用发展迅猛,系统接入规模不断扩大,涌现了大量平台提供商,平台提供商的接…

ZLMediaKit+wvp-GB28181-pro,搭建28181协议视频平台

ZLMediaKitwvp-GB28181-pro,搭建28181协议视频平台 一,简介 ZLMediaKit:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求 一个基于C11的高性能运营级流媒体服务框架,项目地址:ZLMediaKit 特点: 基…

java gb28181网关_视频网关GB28181协议转换解决方案

原标题:视频网关GB28181协议转换解决方案 应用需求及问题: 四川某一所学校,校园内装置有上百个摄像头,学校监控系统是RTSP协议,现在需求要把校园的监控系统视频画面接入到公安系统里, 可公安系统只支持GB-T…

GB28181协议--校时

1、简介 根据《GB/T 28181 —2016》7.10、9.10的要求,GB28181设备网络校时功能描述如下: 联网系统内的IP 网络服务器设备宜支持 NTP(见IETF RFC2030) 协议的网络统一校时服务。 网络校时设备分为时钟源和客户端, 支持客户/服务器的工作模式; 时钟源应支…

GB28181协议常见几种信令流程(一)

在监控系统中,常见的摄像机设备互联协议有国际标准的ONVIF、国标的GB28181和各厂商的私有连接协议,本章从GB28181-2016中摘抄整理常见信令流程,如28181的会话/媒体通道、SIP基本注册/注销流程、客户端主动发起视频点播流程、设备控制流程等。…

国标GB28181协议客户端开发(一)整体流程和技术选型

国标GB28181协议客户端开发(一)整体流程和技术选型 本系列文章将介绍国标GB28181协议设备端的开发过程。本文旨在探讨整体设计和技术选型方面的考虑,为开发人员提供指导和参考。文章将从设备端开发的整体架构、信令交互流程以及关键技术选型等…

java gb28181网关_国标GB28181协议对接网关

国标GB28181网关概述 国标GB28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》最新版为2016年版,较2011年版更加完善,其是基于SIP协议的视频联网框架标准。因其核心应用于公安视频联网,在平安城市、雪亮工程超大规模视频监控联…

GB28181协议之录像回放

目录 一、概述 二、录像文件播放 2.1 基本要求 2.2 命令流程 2.3 抓包示例 2.3.1 Invite请求[SIP服务器---->设备] 2.3.2 Invite应答[设备---->SIP服务器] 2.3.3 ACK[SIP服务器---->设备] 2.3.4 Bye结束回放 2.3.5 Bye应答 2.3.6 播放速度控制 2.3.6 控制…