内存泄漏 & JavaScript-GC垃圾回收机制 - springboot实战电商项目mall4j

本文介绍了内存泄漏的概念,以及在JavaScript中常见的内存泄漏情况。探讨了JS的垃圾回收机制,包括标记清除和引用计数两种策略,并分析了引用计数策略的循环引用问题。同时,列举了如全局变量、未清除的定时器、事件监听和闭包等可能导致内存泄漏的场景。
摘要由CSDN通过智能技术生成

springboot实战电商项目mall4j (https://gitee.com/gz-yami/mall4j)

java开源商城系统

内存泄漏

什么是内存泄漏 ?

程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程,必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。

简单地说:不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)

有一些语言(比如C语言)必须手动释放内存,即内存管理由程序员来负责,所有的内存都需要手动释放,想想就很繁琐,绝大多数的语言提供自动的内存管理,我们称之为 ”垃圾回收机制“

JS的垃圾回收机制-两种收集策略

垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地去找出那些不再继续使用的变量,然后释放其占用的内存。

1. 标记清除

标记清除(mark-and-sweep) 是 JavaScript中最重用的垃圾收集方式

当一个变量在使用时,垃圾收集会给变量添加标记为 进入环境,理论上来说进入环境中的变量,断然是不能被释放的,因为在环境中的的变量很大概率正在使用;

当一个变量离开环境时,垃圾收集会将变量标记为 离开环境 当变量被标记为此状态,在垃圾收集器定时执行时,就会释放掉对应的变量占用的内存

// 声明一个 加1 的函数
function addOne(num){
     
  // 垃圾收集 将 sum 标记为“进入环境”
  let sum += num
  // 垃圾收集 将 sum 标记为“离开环境”
  return sum
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值