标签:style blog http java 使用 os io strong
背景
我们都知道,对于一个高性能的服务器端程序来说,内存的使用非常重要。C++提供了new/delete来管理内存的申请和释放,但是对于小对象来说,直接使用new/delete代价比较大,要付出额外的空间和时间,性价比不高。
另外,我们也要避免多次的申请和释放引起的内存碎片。一旦碎片到达一定程度,即使剩余内存总量够用,但由于缺乏足够的连续空闲空间,导致内存不够用的假象。
c++ STL为了避免内存碎片,实现一个复杂的内存池,leveldb中则没有那么复杂,只是实现了一个"一次性"内存池Arena。
在leveldb里面,并不是所有的地方都使用了这个内存池,主要是memtable使用,主要是用于临时存放用户的更新数据,由于更新的数据可能很小,所以这里使用内存池就很合适。
原理
为了避免小对象的频繁分配,需要减少对new的调用,最简单的做法就是申请大块的内存,多次分给客户。
leveldb用一个vector<char *>来保存所有的内存分配记录,默认每次申请4k的内存,记录下剩余指针和剩余内存字节数,每当有新的申请,如果当前剩余的字节能满足需要,则直接返回给用户,如果不能,对于超过1k的请求,直接new返回,小于1K的请求,则申请一个新的4k块,从中分配一部分给用户。
但是这样的一个问题就是当前块剩余的部分就浪费了,改进的方法,针对每个block都记录剩余字节,这样就需要遍历来查找合适的block,要付出一些性能的代价。google的做法是浪费就浪费吧:-)
至于释放,需要释放整个内存池来释放所占内存,这个和leveldb的需求有关,memtable不需要释放单次内存,flush到硬盘后整个memtable销毁。
![bubuko.com,布布扣](data:image/png;base64,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)
Arena.h
//z 2014-06-05 10:48:50 L.209‘47470 BG57IV3 T1840949363.K.F1370514324[T6,L108,R4,V118]
-
- #ifndef STORAGE_LEVELDB_UTIL_ARENA_H_
- #define STORAGE_LEVELDB_UTIL_ARENA_H_
-
- #include <cstddef>
- #include <vector>
- #include <assert.h>
- #include <stdint.h>
-
- namespace leveldb
- {
- class Arena
- {
- public:
- Arena();
- ~Arena();
-
-
- char* Allocate(size_t bytes);
-
-
- char* AllocateAligned(size_t bytes);
-
-
-
-
- size_t MemoryUsage() const
- {
- return blocks_memory_ + blocks_.capacity() * sizeof(char*);
- }
-
- private:
- char* AllocateFallback(size_t bytes);
- char* AllocateNewBlock(size_t block_bytes);
-
-
- char* alloc_ptr_;
- size_t alloc_bytes_remaining_;
-
-
- std::vector<char*> blocks_;
-
-
- size_t blocks_memory_;
-
-
- Arena(const Arena&);
- void operator=(const Arena&);
- };
-
- inline char* Arena::Allocate(size_t bytes)
- {
-
-
-
- assert(bytes > 0);
-
- if (bytes <= alloc_bytes_remaining_)
- {
- char* result = alloc_ptr_;
- alloc_ptr_ += bytes;
- alloc_bytes_remaining_ -= bytes;
- return result;
- }
-
-
-
-
- return AllocateFallback(bytes);
- }
-
- }
-
- #endif // STORAGE_LEVELDB_UTIL_ARENA_H_
//z 2014-06-05 10:48:50 L.209‘47470 BG57IV3 T1840949363.K.F1370514324[T6,L108,R4,V118]
arena.cc
-
- #include "util/arena.h"
- #include <assert.h>
-
- namespace leveldb {
-
- static const int kBlockSize = 4096;
-
-
- Arena::Arena() {
- blocks_memory_ = 0;
- alloc_ptr_ = NULL;
- alloc_bytes_remaining_ = 0;
- }
-
- Arena::~Arena() {
-
- for (size_t i = 0; i < blocks_.size(); i++) {
- delete[] blocks_[i];
- }
- }
-
- char* Arena::AllocateFallback(size_t bytes) {
-
- if (bytes > kBlockSize / 4) {
-
-
- char* result = AllocateNewBlock(bytes);
- return result;
- }
-
-
-
- alloc_ptr_ = AllocateNewBlock(kBlockSize);
- alloc_bytes_remaining_ = kBlockSize;
-
-
- char* result = alloc_ptr_;
-
- alloc_ptr_ += bytes;
-
- alloc_bytes_remaining_ -= bytes;
- return result;
- }
-
- char* Arena::AllocateAligned(size_t bytes) {
-
- const int align = sizeof(void*);
- assert((align & (align-1)) == 0);
-
- size_t current_mod = reinterpret_cast<uintptr_t>(alloc_ptr_) & (align-1);
- size_t slop = (current_mod == 0 ? 0 : align - current_mod);
- size_t needed = bytes + slop;
- char* result;
-
- if (needed <= alloc_bytes_remaining_) {
-
- result = alloc_ptr_ + slop;
- alloc_ptr_ += needed;
- alloc_bytes_remaining_ -= needed;
- } else {
-
-
-
- result = AllocateFallback(bytes);
- }
-
- assert((reinterpret_cast<uintptr_t>(result) & (align-1)) == 0);
- return result;
- }
-
-
- char* Arena::AllocateNewBlock(size_t block_bytes) {
- char* result = new char[block_bytes];
- blocks_memory_ += block_bytes;
- blocks_.push_back(result);
- return result;
- }
-
- }
//z 2014-06-05 10:48:50 L.209‘47470 BG57IV3 T1840949363.K.F1370514324[T6,L108,R4,V118]
leveldb Arena,布布扣,bubuko.com
leveldb Arena
标签:style blog http java 使用 os io strong
原文地址:http://www.cnblogs.com/shenzhaohai1989/p/3904808.html