谷歌将采用PartitionAlloc FastMalloc技术优化Chrome内存占用

根据Windows Latest的一份报告,工程师将会使用“PartitionAlloc FastMalloc”功能来增强Chrome的RAM管理,如果它确实起作用的话,应该能看到Chrome未来大幅改进内存占用的问题。

由于Chrome浏览器占用大量RAM,最近因此而声名狼藉,但根据最新的统计数据,Chrome浏览器占有率为69.25%,仅占7.22%,的新占9.71%。

说到Edge,微软的现在使用与Chrome相同的Chromium引擎,并且微软一直在努力通过称为“SegmentHeap”的功能来降低其浏览器的RAM占用,微软声称通过该技术让Edge中内存使用量降低了27%。但Segment Heap会造成CPU密集型进程的 “性能倒退”,因此谷歌不打算采用同样的技术。

那谷歌倡导的“PartitionAlloc FastMalloc”是什么呢?

PartitionAlloc有四个分区。分区是包含某些类型的对象的堆。具体来说,PartitionAlloc根据对象的类型在以下四个分区中的任何一个上分配对象。

  • 节点分区:用于分配节点的分区。
  • LayoutObject分区:分配LayoutObject的分区。
  • 缓冲区分区:用于分配对象的分区,这些对象很可能会被用户脚本利用其长度和/或内容。具体来说,Vector,HashTables,ArrayBufferContents和Strings在Buffer分区上分配。
  • FastMalloc分区:分配所有其他对象的分区。标有USING_FAST_MALLOC的对象在FastMalloc分区上分配。

每个分区都包含多个存储桶。存储桶是分区中包含相似大小对象的区域。每个对象分配必须与最接近的存储桶大小对齐。例如,如果一个分区具有三个分别为64个字节,256个字节和1024个字节的存储桶,则将128个字节的对象四舍五入为256个字节并分配给第二个存储桶。

Node分区和LayoutObject分区具有所有N * sizeof(void *)(N = 1,2,…,N_max)的存储桶。这意味着不需要额外的填充来分配Node对象。不同大小的Node对象分配在不同的存储桶中。

Buffer分区和FastMalloc分区有很多存储桶。它们支持任意大小的分配,但可以添加填充以使分配与最接近的存储桶大小对齐。选择存储桶大小可将最坏情况的内存开销保持在10%以下。

通过直接内存映射可以实现较大的分配(> 1 MB)。

“PartitionAlloc FastMalloc”性能如何

在Node分区和LayoutObject分区上进行分配时,PartitionAlloc不会获得锁定,因为可以确保Node和LayoutObjects仅由主线程分配。

在Buffer分区和FastMalloc分区上分配时,PartitionAlloc获取一个锁。PartitionAlloc使用旋转锁,因为线程争用在Blink中很少见。

PartitionAlloc设计为在快速路径中非常快。分配和重新分配的快速路径仅需要两个(合理可预测的)分支。快速路径中的操作数量被最小化,从而导致内联的可能性。

具有Nodes和LayoutObjects的专用分区有助于改善缓存局部性,从而提高性能。

期待Chrome吧,这个性能出众、当前用户最多的浏览器,不要再让用户吐槽内存占用过高的问题了……

原文地址:https://www.zhanzhangb.com/1189.html

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
资讯

PHP 8.0 已经正式发布

2024-1-23 0:44:31

资讯

百度搜索即将上线惊雷算法3.0 刷点击作弊行为

2024-1-23 0:44:33

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索