TCMalloc : Thread-Caching Malloc 论文翻译

TCMalloc是一种高效的内存分配器,尤其适用于多线程环境。它通过线程局部缓存(thread local cache)显著减少了锁竞争,提高性能。小对象分配几乎无锁,大对象分配采用细粒度自旋锁。TCMalloc将对象按大小分为小对象和大对象,分别使用不同的分配策略。小对象通过映射到size-class,从中央数据结构或线程缓存中分配。大对象则直接从中央页堆分配。在释放内存时,小对象返回线程缓存,超过阈值时进行垃圾收集,大对象直接归还中央页堆。
摘要由CSDN通过智能技术生成

本文主要是对于TCMalloc内存分配论文的学习, 英文论文Thread-Caching Malloc见地址:http://goog-perftools.sourceforge.net/doc/tcmalloc.html

Motivation

根据我已做的测试,TCMalloc比gclib2.3里面的malloc(ptmalloc2)和其余的mollocs速度更加的快。在2.8GHz的处理器上,针对小对象(小于32Kb)ptmalloc2做一次malloc/free的操作,需要大概300ns,而TCMalloc同样的操作需要大约50ns。由此可见TCMalloc的速度优势。

在多线程环境下,TCMalloc可以极大减少锁资源的争夺。针对small object,TCMalloc几乎就是lock free的。针对large object,TCMalloc采用高效的细粒度的自旋锁。

ptmalloc2也使用线程私有内存区域来减少锁的竞争,但是有一个很严重的问题,ptmalloc2线程私有的内存区域不能从一个线程私有内存区域移动到另外一个线程私有内存区域,这会造成很严重的内存浪费。例如,在一个谷歌应用程序中,第一阶段将为其数据结构分配大约300MB的内存。当第一阶段完成时,第二阶段将在相同的地址空间中启动。如果将第二个阶段分配到的内存区域与第一个阶段所使用的内存区域不同,那么第二阶段将不会重用第一个阶段之后剩下的任何内存,并将向地址空间添加另一个300MB。在其他应用程序中也发现了类似的内存爆炸问题。

Overview

TCMalloc为每个线程指定了一个thread local cache,小对象的内存分配直接走thread local cache。 根据需要,将对象从central data structures 移动到thread local cache,并且使用定期garbage collection将内存从thread local cache迁移回central data structures。

在这里插入图片描述

TCMalloc默认将size小于32KB的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值