-
类的底层结构
类的底层结构.png
struct bucket_t {
cache_key_t _key; //SEL作为key 如: _key --> @selecter(test)
IMP _imp; //函数的内存地址 如: _imp --> test 方法的地址
}
struct cache_t {
struct bucket_t *_buckets; //散列表
mask_t _mask; //散列表的长度减一;_mask的值是随着存储的增加会发生变化,当内存空间用完了就会扩容(变为原来空间的两倍),扩容后清空缓存,再来一遍
mask_t _occupied; //已经缓存的方法数量
}
位域宏定义(真机环境arm64)
# if __arm64__
# define ISA_MASK 0x0000000ffffffff8ULL
# define ISA_MAGIC_MASK 0x000003f000000001ULL
# define ISA_MAGIC_VALUE 0x000001a000000001ULL
# define ISA_BITFIELD \
uintptr_t nonpointer : 1; 拿二进制的1位来存储 \
uintptr_t has_assoc : 1; \
uintptr_t has_cxx_dtor : 1; \
uintptr_t shiftcls : 33; /*MACH_VM_MAX_ADDRESS 0x1000000000*/ \
uintptr_t magic : 6; \
uintptr_t weakly_referenced : 1; \
uintptr_t deallocating : 1; \
uintptr_t has_sidetable_rc : 1; \
uintptr_t extra_rc : 19
# define RC_ONE (1ULL<<45)
# define RC_HALF (1ULL<<18)
关联对象.png
SideTable.png
内存管理之weak指针
线程池
线程池能有效的处理多个线程的并发问题,避免大量的线程因为互相强占系统资源导致阻塞现象,能够有效的降低频繁创建和销毁线程对性能所带来的开销。真正线程池的实现是通过ThreadPoolExecutor,ThreadPoolExecutor通过配置不同的参数配置来创建线程池
参考1
参考2
网友评论