首页 > 编程知识 正文

v10引擎,荣耀v8内存不够怎么办

时间:2023-05-06 05:06:54 阅读:175574 作者:2155

V8发动机内存回收机制V8发动机内存介绍甜美汽车代理商回收实现甜美汽车代理商回收细节老生代理商回收

V8发动机内存介绍

V8是主流的javascript执行引擎,采用实时编译() (高速); V8对存储器设置了限制,64位系统中存储器大小为1.4G以下,32位系统中存储器大小为700M以下。 限制大小,第一,V8本身是针对浏览器制作的,这个大小只需要对应网页就足够了。 其次,与V8的GC算法相关,回收垃圾时程序会暂停运行。 如果一次回收大量垃圾,程序会暂停太久,影响用户体验。

V8采用世代回收的思想,内存分为甜蜜汽车世代和老生世代,不同对象采用不同的算法。

V8中常用的GC算法是迭代回收、空间复制、标签清除、标签组织、标签增量。

V8将内存分为汽车内存和老生内存,64位系统中汽车内存为32M,老生内存为1.4G; 32位系统甜品汽车的内存为16M,老生的内存为700M。

甜蜜汽车一代是指生存时间比较短的东西。 例如,局部范围变量必须在执行局部范围变量后回收; 例如,全局范围内的变量,其中老一代的值相对较长,可以在全局变量结束程序后回收。

甜蜜汽车代理回收要实现甜蜜汽车代理回收流程,宜采用复制算法(空间交换时间)和标记整理; 甜美的车世代也将内存平分,使用状态的设为From,空闲状态的设为To。

活动对象存储在From区域中,如果代码执行需要分配空间,则首先将所有变量对象分配给From区域。 这个时候,To有空。 在一定程度上应用From空间将触发GC操作。 此时,使用标记组织算法对From空间中的活动对象进行标记,在标记后组织对象并使其位置连续。

然后,将活动对象复制到To空间。 这意味着将From空间中的对象备份到To空间。 此时,可以对From空间进行回收操作。 只要释放From空间就可以回收空间。 From和To的交换空间(即From为To,To为From )。

甜蜜汽车世代的客体回收细节在复制过程中可能会出现ygdqc,在复制过程中老生世代也会出现变量空间。

ygdqc是指将汽车世代的变量移动到老生世代。

在GC操作后仍活着的甜蜜汽车世代需要ygdqc (将其复制到老生世代); 因为如果To空间使用率超过25%,则ygdqc (将活动对象复制到老一代);25%的From和To需要交换空间;如果To空间使用率超过25%,则From空间太小,不够用。

老生代对象老生代内存在的64位OS为1.4G,32位OS为700M,老生代值生存时间较长的对象(全局对象下的变量,闭包)。

老一代对象回收主要采用标记清除、标记整理、增量标记。

首先,使用标签清除完成垃圾空间的回收。 主要是找到并标记老一代存储区域的所有活动对象,直接释放垃圾对象的空间。 此操作存在空间碎片问题。

当需要将甜蜜汽车一代的内容移动到老一代的存储区域时,或者当老一代的存储区域不足,且保存了已经是甜蜜汽车一代移动的对象时,启动标签整理算法进行碎片空间的优化(即ygdqc启动标签整理算法)

标记增量如何优化垃圾回收

垃圾回收作业时屏蔽程序运行,程序运行完毕后,执行回收操作; 加价是指将整体垃圾回收操作分为多个小部分进行垃圾回收的组合,可以代替一次性完成的垃圾回收操作,交替执行垃圾回收和流程。

程序运行后,对穿越老一代存储区的对象进行标记,变量中存在可直接访问和间接访问的操作,如果发现第一层的可访问是,则停止运行程序,进行二次标记,然后运行程序,交替运行标记完成后执行垃圾回收

甜蜜汽车再生区的垃圾回收采用复制算法,内部随时都有空闲空间。 甜蜜的汽车代替品空间本来就很小,平分后就更小了,适合利用空间改变时间。

老一代地区的垃圾回收不适合复制算法,空间大的部分是两个浪费; 对象多,复印中消耗时间多。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。