char *需要释放_句柄Handle的释放(8)

本篇首先介绍几个与句柄分配与释放密切相关的类,然后重点介绍句柄的释放。

1、HandleArea、Area与Chunk

句柄都是在HandleArea中分配并存储的,类的定义如下:

// Thread local handle areaclass HandleArea: public Arena {
      friend class HandleMark;  ...  HandleArea* _prev;  // HandleArea通过_prev连接成单链表 public:  // Constructor  HandleArea(HandleArea* prev) : Arena(Chunk::tiny_size) {
        _prev = prev;  }    // Handle allocation private:  oop* real_allocate_handle(oop obj) { // 分配内存并存储obj对象    oop* handle = (oop*) Amalloc_4(oopSize);    *handle = obj;    return handle;  }   // ... };

real_allocate_handle()用来在HandleArea中分配内存并存储obj对象,方法会调用父类Arena中定义的Amalloc_4()函数。HandleArea的父类Arena的定义如下:

// Fast allocation of memoryclass Arena: public CHeapObj {
    protected:  ...  Chunk *_first;                // First chunk  Chunk *_chunk;                // current chunk  char  *_hwm, *_max;            // High water mark and max in current chunk  void* grow(size_t x);         // Get a new Chunk of at least size x  size_t _size_in_bytes;        // Size of arena (used for memory usage tracing)public:  Arena();  Arena(size_t init_size);  Arena(Arena *old
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值