springboot实战电商项目mall4j (https://gitee.com/gz-yami/mall4j)
内存泄漏
什么是内存泄漏 ?
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程,必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。
简单地说:不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)
有一些语言(比如C语言)必须手动释放内存,即内存管理由程序员来负责,所有的内存都需要手动释放,想想就很繁琐,绝大多数的语言提供自动的内存管理,我们称之为 ”垃圾回收机制“
JS的垃圾回收机制-两种收集策略
垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地去找出那些不再继续使用的变量,然后释放其占用的内存。
1. 标记清除
标记清除(mark-and-sweep) 是 JavaScript中最重用的垃圾收集方式
当一个变量在使用时,垃圾收集会给变量添加标记为 进入环境
,理论上来说进入环境中的变量,断然是不能被释放的,因为在环境中的的变量很大概率正在使用;
当一个变量离开环境时,垃圾收集会将变量标记为 离开环境
当变量被标记为此状态,在垃圾收集器定时执行时,就会释放掉对应的变量占用的内存
// 声明一个 加1 的函数
function addOne(num){
// 垃圾收集 将 sum 标记为“进入环境”
let sum += num
// 垃圾收集 将 sum 标记为“离开环境”
return sum
}