让学习“上瘾”,成为更好的自己!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
/*
垃圾收集机制原理:找出那些不再继续使用的变量,然后释放其占用的内存
垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作
垃圾收集器必须跟踪哪个变量有用哪个变量无用,然后对不再有用的变量打上标记,以备将来收回其占用的内存
标记策略有:
1, 标记清除(常用垃圾收集方式)
如何标记变量不重要,关键在于采取怎样的垃圾收集策略!!!
策略:首先,垃圾收集器在运行的时候给存储在内存中的所有变量都加上标记,
然后,去掉环境中的变量和被环境中的变量引用的变量的标记
接着,再被加上标记的变量被视为准备删除的变量
最后,完成内存清除工作,销毁那些带标记的值并收回它们所占用的内存空间
2,引用计数(不太常用)
含义:跟踪记录每一个值被引用的次数,
声明一个变量并将一个引用类型值赋给变量,则这个值的引用次数为1,再被引用,则加1;取消引用,则减1;
最后,垃圾收集器会在下次运行时,释放那些引用次数为0的值所占用的内存
3,性能问题
垃圾收集器是周期运行的
IE垃圾收集器:根据内存分配量运行的
4,智能内存
JavaScript在进行内存管理以及垃圾收集时面临一个主要的问题:
分配给Web浏览器的可用内存数量通常要比分配给桌面应用程序的少
优化内存的最佳方式:为执行中的代码只保存必要的数据
--> 解除引用:一旦数据不再有用,通过设置其值为null来释放其引用 ==》 适用于大多数的全局变量和全局对象的属性
==》 局部变量会在他们离开执行环境是自动解除引用
【注意】JavaScript是一门具有自动垃圾收集机制的编程语言!!!
*/
// 智能内存
function createPerson(name){
var localPerson = new Object();
localPerson.name = name;
return localPerson;
}
var globalPerson = createPerson('kai');
globalPerson = null; // 手工解除globalPerson的引用
// 解除一个值的引用并不意味着自动回收该值所占用的内存。
// 解除引用的目的:让值脱离执行环境,以便垃圾收集器下次运行时将其回收
</script>
</head>
<body>
</body>
</html>