v8引擎--垃圾回收机制--Mr.Ember

v8引擎--垃圾回收机制java

摘要: node

 编程语言分为编译型语言和解释型语言,编译型语言执行速度要超过解释型语言。首先javasrcipt是一个解释型语言,解释型语言就是边编译边执行,因此执行速度相对较慢。v8引擎主要就是为了加快浏览器执行js的速度。node中也是使用了v8引擎来加快js的执行。算法

下面主要是介绍V8的垃圾回收机制编程

 

1. v8内存限制浏览器

node在32位机器上只有0.7GB内存,64位上有1.4GB。为什么限制内存的大小呢?是由于v8有垃圾回收机制。怎么才能突破限制,经过JVM来修改内存的大小。能够修改新生代和老生代的大小。编程语言

你们可能不了解什么是新生代和老生代,下面会为你们介绍👇spa

 

2. 如何判断回收内容指针

 若是一个对象不知足下面条件的,将会被回收对象

 (1)非根对象被其余对象引用ip

 (2)浏览器中对象被window引用

 (3)node中对象被global对象引用

 

3. v8的回收策略

 内存被分为新生代和老生代。新生代存储通常是活跃对象,浏览器对新生代的回收也是比较频繁。新生代中对象在知足某些条件后,会晋升为老生代。

 两个生代的大小和回收算法都是不一样的。

 

4. 新生代的回收策略

 新生代的回收策略是经过scavenge中的Cheney算法实现的,这个算法主要是经过复制实现的。新生代内存主要分为两个区,From区(被使用的)和To区(闲置的),这个两个区主要就是进行来回复制。新生代的回收主要的实现步骤以下:

 (1)对象首先被分到From区

 (2)检查对象是不是活跃对象,有的话直接复制到To区

 (3)To区有两个指针:scanPtr和allocationPtr  scanPtr主要是指向即将扫描的活跃对象  allocationPtr是为即将成为新对象分配内存

 

5. 新生代对象的晋升

 (1)从From区到To区,检查对象的内存地址是否经历过新生代的清理。

 (2)对象从From区到To区,发现To区空间已经被使用超过25%,则对象将直接被分配到老生代

 

6. 老生代的回收

 老生代的回收策略主要是标记清除和标记整理。

 标记清除:主要是两个步骤,标记和清除。首先遍历老生代的对象,判断对象是否被其余对象引用,有的话标记,没有的话进入清除阶段,把全部未被标记的对象清楚。

 标记整理:因为在标记清除阶段不少清除了以后,对象的内存不是连续的,致使不少很大对象来了以后没有内存能够用。这时标记整理就发挥做用了。

相关文章
相关标签/搜索