1.原理
程序在使用过程中会使用到很多数据,这些数据分为原始数据和对象类型数据。对于原始数据都是由自身来控制的,所以回收指的是堆区里面的对象类型数据,而且V8采用分代回收的思想,主要讲内存分为新生代和老生代,针对不同分代采用不同的GC算法。
2.新生代回收机制
新生代回收机制指的是存活时间较短的对象,回收过程中采用复制算法+标记整理模式。内存被区分为两个等大小的空间,一个空间使用From空间,一个空间的To空间
3.老生代回收机制
老生代回收机制指的是存放的对象存活的时间较长,且空间庞大,所以不适合复制算法。采用的是标记清除,标记整理,增量标记算法
4.两者之间的对比
1.新生代区域垃圾回收使用空间换时间
2.老生代区域垃圾回收不适合复制算法
5.node.js模块应用小例子
通过文件的读取操做将文件的信息进行读取,并个文件设置一些属性,将这些属性放在一个对象里面,参考代码如下
// 导入文件fs模块和path模块
const fs = require('fs');
const path = require('path');
// 获取到hwork1这个目录
const filename = path.resolve(__dirname);
// 创建一个空对象 存放文件01.js
const obj1 = {}
// 创建一个空对象 存放文件hwork1_1
const obj2 = {}
// 属性数组
const arr = ['name','ext','isFile','size','createTime','updateTime'];
// 读取hwork1这个目录里所有的子目录和文件,包括hwork1_1文件夹和01.js 02.js文件
async function test(){
const paths = await fs.promises.readdir(filename)
// 得到01.js这个文件
const filejs = paths[0];
// 01.js文件名
const name1 = '01';
// 01.js后缀名
const ext1 = path.extname(filejs)
// 得到整个01.js这个文件的详细参数
const stats1 = await fs.promises.stat(filejs)
// 判断是否是一个文件
const isflie = stats1.isFile()
// 判断文件大小
const siz = stats1.size
// 文件创建时间
const createtime = stats1.birthtime
// 文件修改时间
const updatetime = stats1.mtime
// 得到hwork1_1这个文件
const filehw1_1 = paths[1];
// hwork1_1文件名
const name2 = 'hwork1_1';
// hwork1_1后缀名
const ext2 = path.extname(filehw1_1)
if(ext2 == ''){
// console.log('该文件为文件夹')
ext2 == ''
}
// 得到整个hwork1_1这个文件的详细参数
const stats2 = await fs.promises.stat(filehw1_1)
// 判断是否是一个文件
const isflie2 = stats2.isFile()
// 判断文件大小
const siz2 = stats2.size
// 文件创建时间
const createtime2 = stats2.birthtime
// 文件修改时间
const updatetime2 = stats2.mtime
// 循环遍历属性数组
arr.forEach(function(value,index,arr){
obj1[arr[0]] = name1;
obj1[arr[1]] = ext1;
obj1[arr[2]] = isflie;
obj1[arr[3]] = siz;
obj1[arr[4]] = createtime;
obj1[arr[5]] = updatetime;
// obj2 的
obj2[arr[0]] = name2;
obj2[arr[1]] = ext2;
obj2[arr[2]] = isflie2;
obj2[arr[3]] = siz2;
obj2[arr[4]] = createtime2;
obj2[arr[5]] = updatetime2;
})
console.log(obj1)
console.log(obj2)
}
test()