面试官:JavaScript的垃圾回收机制你了解吗?

来源:程序思维浏览:1665次
面试官:JavaScript的垃圾回收机制你了解吗?

Js有一个自动垃圾收集机制。垃圾收集器定期执行。

在JS中收集垃圾最常见的方法是标记。

工作原理:当变量进入环境时,将其标记为“进入环境”。当变量离开环境时,它被标记为“远离环境”。当标签“远离环境”时回收内存。

工作过程:

1.垃圾收集器将在运行时标记存储在内存中的所有变量。

2.删除环境中的变量以及环境中变量引用的变量的变量。

3.再次标记将被视为要删除的变量。

4.垃圾收集器完成内存清理,销毁标记值并回收它们占用的内存空间。

参考计数方法

工作原理:跟踪每个值的引用次数。

工作过程:

1.声明一个变量并为变量赋一个引用类型的值。引用类型值的引用号是1。

2.将相同的值分配给另一个变量。对此引用类型值的引用数增加1。

3.当包含此引用类型的值的变量分配给另一个值时,对引用类型值的引用数减1。

4.当引用数变为0时,无法访问该值。

5.当垃圾收集器接下来运行时,它释放值占用的内存,引用计数为零。

但是循环在引用时不会释放内存

循环引用是对象A包含另一个指向对象B的指针,而B也包含对A的引用。

由于IE中BOM、DOM的实现使用COM,COM对象使用的垃圾收集机制是引用计数策略。因此循环会引起一个问题。

解决方案:手动断开js对象和DOM之间的链接。赋值为null。 IE9将DOM和BOM转换为真正的JS对象,因此避免了这个问题。

什么会导致内存泄漏?

虽然有一个垃圾收集机制,如果我们不正确地编写代码,它仍然会导致内存泄漏。

1.由意外的全局变量引起的内存泄漏。

原因:全局变量不会被回收。

解决方案:避免使用严格模式。

2.关闭引起的内存泄漏

原因:闭包可以在函数中维护局部变量,以便它们不会被释放。

解决方案:在外部定义事件处理程序,取消阻塞闭包,或者在定义事件处理程序的外部函数中删除对dom的引用。

3.未清理DOM元素引用原因:虽然其他地方已被删除,但仍有对象中的dom引用。

解决方案:手动删除。

4.忘记定时器或回叫

原因:计时器中有一个dom参考。即使dom被删除,计时器仍然在那里,所以内存中仍有这个dom。

解决方案:手动删除计时器和dom。

5.由子元素引用引起的内存泄漏

原因:div中的ul得到这个div,间接指的是给定的li,那么此时因为div间接指li,即使li被清空,它仍然在内存中,只要li没有被删除,他的父元素不会被删除。

解决方案:手动删除空。

内存是什么?什么不在记忆中?

基本类型是:Undefined、Null、Boolean、Number、String

基类型的值存储在存储器中并存储在堆栈存储器中。将基本类型的值从一个变量复制到另一个变量会创建该值的副本。

参考类型:对象

引用类型的值是一个对象,存储在堆内存中。

1.包含引用类型值的变量实际上不包含对象本身,而是包含指向对象的指针。将引用类型的值从一个变量复制到另一个变量,副本实际上是一个指针,因此两个变量最终都指向同一个对象。

2. js不允许直接访问内存中的位置,也就是说,它不能直接访问操作对象的内存空间。当您操作对象时,您实际上正在处理对象的引用而不是实际对象。

堆栈和堆之间的区别

堆栈空间分配差异:

1、堆栈(操作系统):由操作系统自动分配释放,存储函数的参数值,局部变量的值等。它以类似于数据结构中的堆栈的方式操作;

2、堆(操作系统):通常由程序员发布,如果程序员没有释放,程序可能会在程序结束时由OS回收,分配类似于链表。

两个、堆栈缓存方法的区别:

1、堆栈使用1级缓存,它们通常在调用存储空间时,在调用后立即释放;

2、堆存储在二级缓存中,生命周期由虚拟机的垃圾收集算法确定(一旦它可以作为孤立对象再循环)。因此调用这些对象的速度相对较低。

三个、堆栈数据结构的区别:

堆(数据结构):堆可以被认为是树,例如:堆排序;堆栈(数据结构):高级数据结构。
精品好课
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
收藏
扫一扫关注我们