node内存管理

V8内存限制

在Node中通过JavaScript使用内存只能使用部分内存(64位系统下为1.4GB,32位系统下为0.7GB)。
造成这样的问题主要原因在于Node基于V8构建,Node在使用的JavaScript对象基本上都是通过V8自己的方式来进行分配和管理。这套内存管理机制在浏览器下使用绰绰有余,但在Node中,就被束缚了。
————————————————
原文链接:https://blog.csdn.net/qq_42427109/article/details/100902835

 为什么要限制内存大小

表层原因是因为V8最初为浏览器而设计,不太可能遇到大的内存使用场景。深层原因是V8的垃圾回收机制的限制。
按照官方的说法:如果以1.5GB的垃圾回收堆内存为例,V8做一次小的垃圾回收需要50ms以上,一次增量式的需要1s以上,这会引起JavaScript线程暂停执行的时间。
但也有额外的方法可以放宽V8的内存限制:
node --max-old-space-size=1700 test.js //单位为MB
//或者
node --max-new-space-size=1024 test.js //MB

V8的垃圾回收机制 

 V8的垃圾回收策略主要基于分代式垃圾回收机制。
在实际垃圾回收过程中,没有一种垃圾回收算法能能够胜任所有场景,由于不同的对象生命周期不同,所以只能针对特定的情况使用不同的算法才能有更好的效果。

在V8中,内存主要分为新生代和老年代,新生代中的对象为存活周期较短的对象,老生代中的对象为存活周期长和常驻内存的对象

在这里插入图片描述 

V8堆的整体大小就是新生代所用内存空间加上老生代的内存空间。

  • Scavenge算法(复制清除)

 

Scavenge算法采用的是Cheney算法(复制清除),它将堆内存一分为二,每一部分空间称之为"semispace"。在这两个空间中,只有一个处于使用中,一个处于空闲中。处于使用的称为From空间,处于闲置的称为To空间。
当我们分配对象的时候,现在From空间中进行分配,并开始进行垃圾回收时。会检查From空间中的存活对象,这些存活对象将被复制到To空间中,而非存活对象占用的空间会被释放。完成复制后,From空间和To空间的角色互换。
但该算法的缺点是每次只能使用堆内存额一半。由于该算法只复制存货的对象,并且对于生命周期短的场景存活对象只占少部分,所以它在时间效率上的表现优异

在这里插入图片描述

当一个对象经过多次复制依然存活的时候,它将会被认为是生命周期较长的对象,这种对象会被移动到老生代中采用新的算法进行管理,这种移动称为“晋升”
默认情况下,V8的对象分配主要集中在From空间中,复制期间检查内存地址来判断是否被复制过,如果是,则晋升至老生代中,否则复制到To空间中
还有一个判断条件是To空间的内存占用比,当要从From空间复制一个对象到To孔家时,如果To空间使用内存超过25%,则也会晋升至老生代空间中。
为什么会有25%这个内存限制?
因为当回收一次后,这个To空间就变为From空间,接下来的内存分配将在这个空间进行,如果占比过高,会影响内存分配
缺点:

存活对象较多,复制存活对象的效率较低
浪费一半内存空间
 

如何解决复制清除带来的问题

Mark-Sweep(标记清除):
它分为标记和清除两个阶段,与复制清除相比,标记清除并不将内存空间一分为二,且清除对象内存的方式也不同,标记清楚在标记阶段遍历堆中的所有对象,并标记活着的对象,在随后的清除阶段中,只清除没有被标记的对象,
为什么标记活着的对象?
因为活对象在新生代中只占小部分,死对象在老生代中只占小部分,这就是能高效处理的原因:

在这里插入图片描述

缺点:

内存空间会出现不连续的状态,从而导致出现内存碎片对后续的内存分配造成问题

如何解决内存碎片的问题 

基于标记清除,不同的地方在于,对象在被标记死亡后,在整理的过程中,将活着的对象往一端移动,移动完成后,直接清理边界外的内存
在这里插入图片描述

算法对比表: 

回收算法标记清除标记整理复制清除
效率中等最慢最快
内存开销少(有碎片)少(无碎片)双倍空间(无碎片)
是否移动对象

从表中可以看出,由于标记整理需要移动对象,所以它执行的效率不是很高,为了取舍,V8默认使用了"标记清除",在空间不足以对从新生代晋升过来的对象进行分配时才使用标记整理

V8如何优化垃圾回收带来的"停顿问题?

为了降低全堆垃圾回收带来的停顿时间,V8先从标记入手,将原本需要一口气停顿完成的动作改为增量标记,也就是拆分为许多小"步进",每做完一个"步进"就让JavaScript应用执行一会儿,从而完成垃圾回收和应用执行进行交替执行完成标记阶段
V8在完成增量标记后,垃圾回收的最大停顿时间可减少到原本的1/6左右
标记完成后,V8在后续的清理采用了延迟清理,整理也采用了增量式整理,同上的道理差不多,在这里就不多做深究了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值