【003】垃圾回收机制
前言
垃圾回收是什么,你们是不是想到垃圾车来收垃圾了?耳边响起东方红?
是不是还有人想到想到的是废品回收:收电饭煲、高压窝、煤气灶~~~
其实今天我们要讲的是内存中·垃圾回收啦~
本文首发于【掘金-垃圾回收(GC)哪些事儿】
第一次了解垃圾回收是在一个公众号公众号看到的,当时讲了一下标记清除法和引用计数法,但是当时存在很多疑惑,比如可达不可达到底是什么?当时也没太在意。今天重新了解,用自己的话总结分享出来。希望能给您一些启发和思考。
这篇文章包含以下知识点:
- 什么是垃圾回收
- 如何判断是否为垃圾
- 可达性
- 垃圾回收算法有哪些,各自的特点
- 内存泄漏
在文章开始前要知道一个很重要的知识,JS的内存生命周期。今天要讲的就是那些关于内存释放时的故事。
- 1.为变量分配内存
- 2.使用分配的内存
- 3.不需要的时候将内存释放
一、什么是垃圾回收
第一次垃圾回收难理解我觉得一个原因是比较抽象,毕竟是浏览器内部的操作,是我们肉眼不可见的。
可以想象我们日常生活中那些废弃的没用的东西就是“垃圾”,为了占位置就要将生活垃圾清理掉。js内存管理也是如此,只不过他的内存管理是自动执行的,我们不可见的(但是在没有垃圾回收机制的语言中就需要人为管理内存,比如c语言)。
知识点1
JavaScript
引擎中有一个后台进程称为垃圾回收器,它监视所有对象,并删除那些不可访问的对象(垃圾)。
知识点2
我们在创建一个字符串、数组等都看作对象(不管是基本类型还是引用类型)都会为这个对象开辟一个内存空间来保存这个变量。如果访问不到这个对象的时候(没用了)就是垃圾
那么你可能会问,
不可访问的对象是什么呢?怎么知道对象是否可以访问呢?下面来一一道来。
二、如何判断垃圾
如何判断垃圾前面说过就是看这个对象能否被访问,那如何知道对象能否被访问?有一个专业的词叫可达性。根据对象是否可达来判断。
可达性
JavaScript 中内存管理的主要概念是可达性。
简单地说,“可达性” 值就是那些以某种方式可访问或可用的值,它们被保证存储在内存中。先看一个例子吧
//定义一个user对象,引用name属性
const user={name:"john"
}
这里箭头表示一个对象引用。全局变量user
引用对象 {name:“John”}
,user 的 “name” 属性存储一个基本类型,因此它被绘制在对象中。
如果 user 的值被覆盖,则引用丢失:
例1
//让user的引用为空
user=null
这个时候通过user就没有办法访问到name这个属性,更没办法得到属性值。
图中的箭头表示引用,第一个图user
引用name
属性,第二图让user
指向空,箭头消失,user
无法引用name
属性,js引擎将 {name:“John”}
回收到垃圾桶处理掉,释放了内存空间。
圈个重点
【003】垃圾回收机制相关推荐
- 详细介绍Java垃圾回收机制
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...
- JAVA中的垃圾回收机制以及其在android开发中的作用
http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构,以及垃圾回收机制的作用.在后半部分,描述了如何检测 ...
- 图解 Java 垃圾回收机制,写得非常好!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文:https://www.oracle.com/webfold ...
- 详解JVM内存管理与垃圾回收机制2 - 何为垃圾
随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...
- Python3.5源码分析-垃圾回收机制
Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...
- 深入浅出Java垃圾回收机制
2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...
- Java 垃圾回收机制,13张图给你讲清楚!
作者:Rhys_Lee 等等等 https://blog.csdn.net/zl1zl2zl3/article/details/90904088 什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 ...
- 安卓 java内存碎片_理解Android Java垃圾回收机制
Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...
- java垃圾回收机制_笔记 | Java垃圾回收机制
本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...
最新文章
- deinstall 卸载grid_卸载Oracle 11g的Grid小计
- bootstrap文件不能被识别_树莓派安装openCV做图像识别
- 容器对象模式。 一种新的测试模式。
- WSL2 安装中文输入法教程 简单有效
- app中使用用户名/邮箱/手机号登录的思路分析
- SAP License:SAP S/4HANA就是答案
- 阿里云企业邮箱标准版多域名绑定
- 6个小故事:让你变身营销超人!
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT
- python 绕过 反爬
- KY-RTI分布仿真技术:第八章 Visual C#程序设计
- Encryption raised an exception
- Scratch教学课程:不撞南墙不回头
- C语言——宏定义及保留n位小数
- 对标苹果,小米的漫长激情与征程
- 独孤思维:减压还能赚钱?让压力变有利可图的项目
- 身为土木牛马的我是如何成功提桶拿到互联网前端50w大厂offer的
- 多选框的全选和全不选
- XeLaTeX: 支持现代字体 LaTeX 编译器
- vue-draggable学习和使用