Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请讲一下JavaScript的垃圾回收机制。 #785

Open
pwstrick opened this issue Jul 18, 2019 · 1 comment
Open

请讲一下JavaScript的垃圾回收机制。 #785

pwstrick opened this issue Jul 18, 2019 · 1 comment
Labels
JavaScript JavaScript类的题目

Comments

@pwstrick
Copy link
Owner

请讲一下JavaScript的垃圾回收机制。

来源《一个前端失业者的面试之旅

@pwstrick pwstrick added the JavaScript JavaScript类的题目 label Jul 18, 2019
@pwstrick
Copy link
Owner Author

pwstrick commented Aug 14, 2020

(1)栈中的数据
在调用栈中,有一个记录当前执行状态的指针(称为 ESP),当ESP下移后,之前的数据就会被销毁。

(2)堆中的数据
要回收堆中的垃圾数据,就需要用到 JavaScript 中的垃圾回收器了。
垃圾回收器的工作流程:

  1. 第一步是标记空间中活动对象和非活动对象。所谓活动对象就是还在使用的对象,非活动对象就是可以进行垃圾回收的对象。
  2. 第二步是回收非活动对象所占据的内存。其实就是在所有的标记完成之后,统一清理内存中所有被标记为可回收的对象。
  3. 第三步是做内存整理,频繁回收对象后,内存中就会存在大量不连续空间,这些不连续的内存空间称为内存碎片。

使用增量标记算法,可以把一个完整的垃圾回收任务拆分为很多小的任务,这些小的任务执行时间比较短,可以穿插在其他的 JavaScript 任务中间执行,这样当执行上述动画效果时,就不会让用户因为垃圾回收任务而感受到页面的卡顿了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript JavaScript类的题目
Projects
None yet
Development

No branches or pull requests

1 participant