美文网首页
关于内存管理的问题补充

关于内存管理的问题补充

作者: 高思阳 | 来源:发表于2019-02-27 17:42 被阅读0次

A、为什么内存管理,不用一个sideTable,而是用多个。(非嵌入式64个)

因为针对所有的对象创建、操作,可能是在不同的线程中进行,那么对sideTable进行操作时,需要对sideTable进行加锁处理,才能保证对于数据的访问安全。

那么,如果所有数据都放在一张表里面,就会出现效率问题。也就是说,如果有对象在操作这张表,那么下一个对象就要等此对象操作完之后再访问这张表。

因此,苹果引入了分离锁的概念,也就是把对象的信息(引用计数表、弱引用表)分拆成多个表,这样如果有两个对象a、b,分别属于不同的表,那么就可以并发进行操作。(当然,如果同属于一张表还是顺序操作)这样就提高了访问效率。

上面也就是sideTable里面自旋锁的作用。当前锁如果已被其他线程获取,那当前线程就会不断探测这个锁是否有被释放,如果释放了就第一时间去获取这个锁。而将sideTable分为多个表,提升了效率,显示出了自旋锁的特点:轻量访问。

分离锁 sideTable里面的自旋锁

B、如何实现快速分流

使用hash查找

hash算法 sideTable使用hash算法

相关文章

  • 关于内存管理的问题补充

    A、为什么内存管理,不用一个sideTable,而是用多个。(非嵌入式64个) 因为针对所有的对象创建、操作,可能...

  • Controller销毁NSTimer释放的细节

    关于NSTimer释放和内存泄漏的问题。 @(NSTimer)[内存管理,NSTimer释放,循环引用] 首先需要...

  • iOS 内存管理(补充)

    NSNumber *__strong num = [[NSNumber alloc] init];注意 __str...

  • 内存管理

    内存管理 关于内存的描述

  • Java 内存管理

    Java可以自动管理内存,比C/C++要方便的多, 但是实际Java 也会出现内存溢出的问题。 关于Java的内存...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • 伙伴算法和slab算法

    0. 内存管理问题 内存碎片太小和管理内存碎片的效率问题 内存碎片:回收内存时,将内存块放入free链表中。因内存...

  • C++ 内存管理1

    内存管理是我们在编程时经常遇到的问题,而关于内存管理的问题往往会导致我们无从下手,这篇随笔是我阅读《高质量C++》...

  • performSelector内存泄露

    performSelector延时调用的问题, performSelector关于内存管理的执行原理是这样的:执行...

  • 《Objective-C高级编程 iOS与OS X多线程与内存管

    内存管理篇: 5.ARC的规则补充 ARC的方法命名 我们都知道,在内存管理的思考方式中,当方法命名以“alloc...

网友评论

      本文标题:关于内存管理的问题补充

      本文链接:https://www.haomeiwen.com/subject/msofuqtx.html