浅谈垃圾回收机制

简介: 浅谈垃圾回收机制

前言:


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

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

1.标记清除(主要)


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

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

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

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

image.png

2.引用计数(次要)


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

具体的规则如下:

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

3.一些注意的点


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

相关文章
|
7月前
|
算法 Java
JVM垃圾回收机制
JVM垃圾回收机制
45 0
|
7月前
|
Java 程序员
探讨JVM垃圾回收机制与内存泄漏
探讨JVM垃圾回收机制与内存泄漏
|
7月前
|
存储 缓存 算法
JVM的垃圾回收机制
JVM的垃圾回收机制
|
1月前
|
JavaScript 前端开发 Java
垃圾回收机制会导致内存泄漏吗?
【10月更文挑战第29天】虽然JavaScript的垃圾回收机制本身是为了有效地管理内存,但开发者在编写代码时需要注意上述这些可能导致内存泄漏的情况,遵循良好的编程习惯,及时释放不再使用的资源,以确保程序能够高效地利用内存资源,避免出现内存泄漏问题。
|
7月前
|
人工智能 Java 数据库连接
【C#】浅谈C#中垃圾回收机制
【C#】浅谈C#中垃圾回收机制
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
88 0
|
6月前
|
存储 算法 Java
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
62 1
|
7月前
|
算法 Java
垃圾回收机制
垃圾回收是自动内存管理机制,用于检测和回收不再使用的内存资源,防止泄漏和浪费。主要算法包括:标记-清除、引用计数(难以处理循环引用)、分代回收(基于对象生命周期)、增量回收(减少应用停顿时间)和并发回收(同时执行回收和应用)。不同语言和环境选择不同策略,垃圾回收性能直接影响程序内存管理和执行效率。
|
7月前
|
存储 缓存 监控
Java内存管理:垃圾回收与内存泄漏
【4月更文挑战第16天】本文探讨了Java的内存管理机制,重点在于垃圾回收和内存泄漏。垃圾回收通过标记-清除过程回收无用对象,Java提供了多种GC类型,如Serial、Parallel、CMS和G1。内存泄漏导致内存无法释放,常见原因包括静态集合、监听器、内部类、未关闭资源和缓存。内存泄漏影响性能,可能导致应用崩溃。避免内存泄漏的策略包括代码审查、使用分析工具、合理设计和及时释放资源。理解这些原理对开发高性能Java应用至关重要。
104 5
|
7月前
|
算法 Java PHP
JVM 的垃圾回收机制以及垃圾回收算法的详解
JVM 的垃圾回收机制以及垃圾回收算法的详解
55 0