前言

垃圾回收是什么,你们是不是想到垃圾车来收垃圾了?耳边响起东方红?

是不是还有人想到想到的是废品回收:收电饭煲、高压窝、煤气灶~~~

其实今天我们要讲的是内存中·垃圾回收啦~

本文首发于【掘金-垃圾回收(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】垃圾回收机制相关推荐

  1. 详细介绍Java垃圾回收机制

    垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...

  2. JAVA中的垃圾回收机制以及其在android开发中的作用

    http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构,以及垃圾回收机制的作用.在后半部分,描述了如何检测 ...

  3. 图解 Java 垃圾回收机制,写得非常好!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文:https://www.oracle.com/webfold ...

  4. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  5. Python3.5源码分析-垃圾回收机制

    Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...

  6. 深入浅出Java垃圾回收机制

    2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...

  7. Java 垃圾回收机制,13张图给你讲清楚!

    作者:Rhys_Lee 等等等 https://blog.csdn.net/zl1zl2zl3/article/details/90904088 什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 ...

  8. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

  9. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

最新文章

  1. deinstall 卸载grid_卸载Oracle 11g的Grid小计
  2. bootstrap文件不能被识别_树莓派安装openCV做图像识别
  3. 容器对象模式。 一种新的测试模式。
  4. WSL2 安装中文输入法教程 简单有效
  5. app中使用用户名/邮箱/手机号登录的思路分析
  6. SAP License:SAP S/4HANA就是答案
  7. 阿里云企业邮箱标准版多域名绑定
  8. 6个小故事:让你变身营销超人!
  9. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT
  10. python 绕过 反爬
  11. KY-RTI分布仿真技术:第八章 Visual C#程序设计
  12. Encryption raised an exception
  13. Scratch教学课程:不撞南墙不回头
  14. C语言——宏定义及保留n位小数
  15. 对标苹果,小米的漫长激情与征程
  16. 独孤思维:减压还能赚钱?让压力变有利可图的项目
  17. 身为土木牛马的我是如何成功提桶拿到互联网前端50w大厂offer的
  18. 多选框的全选和全不选
  19. XeLaTeX: 支持现代字体 LaTeX 编译器
  20. vue-draggable学习和使用

热门文章

  1. java 有序的Map LinkedHashMap简介
  2. 联想服务器启动很久才能进系统,Win10开机一直请稍后很久才进系统的两种解决方法...
  3. qdialog 返回值_PyQt5 中QDialog值传递
  4. Android获取最新技术资讯可关注的网站
  5. 获取电脑当前正在连接的wifi密码
  6. vue中模糊搜索keyup在中文输入法下输入英文无效的解决方法
  7. PCL kdtree的源码分析
  8. Win系统电脑无法连接iPhone热点问题的检测流程
  9. 推荐一款好用的Linux模拟器
  10. steam搬砖月收入10000+,教程价值4000