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

v8垃圾回收 #44

Closed
lovelmh13 opened this issue Jul 26, 2020 · 0 comments
Closed

v8垃圾回收 #44

lovelmh13 opened this issue Jul 26, 2020 · 0 comments

Comments

@lovelmh13
Copy link
Owner

快速记一下:

分为新生代和老生代内存。 新生代存生命周期短的对象;老生代存生命周期长的对象。经过新生代的回收,还在的对象会晋升到老生代里面去

新生代

Scavenge算法,把空间化为两半(存在空间浪费,空间换时间),分为 From 空间(使用中的内存)和To 空间(闲置的内存)。活对象占小部分。Scavenge算法只复制活着的对象,所以效率高。

回收流程

From空间进行垃圾回收,把活对象转到To空间(中间要对活对象进行检测,是不是经历过回收了,经历过的去老生代内存)。清空From,互换From和To

流程1

From中的对象 -> 经过回收 ?去老生代内存 :去To内存。

流程2

To空间已经用了25% ?去老生代内存 :去To内存。

因为后面To和From要互换,如果To占用高,会影响转换后的内存分配

老生代

Mark-Sweep和Mark-Compact 算法。死对象占小部分。Mark-Sweep只清理死的对象,所以效率高

Mark-Sweep 标记清除

不再把空间分为两半,不存在空间的浪费。

遍历所有对象,标记活着的。清除的时候,清除没有标记的。但是会造成内存空间不连续

Mark-Compact

解决Mark-Sweep 内存空间不连续的问题。

把活着的对象往一端移动,清理边界外的内存。

参考

《深入浅出Node.js》

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

No branches or pull requests

1 participant