• 白开了杯水
    2019-04-11
    一直不知道内存分配最大值获取和怎么获取当前内存分配,看了文章豁然开朗,想问的是,老师这些知识都是通过分析源码得来的吗?
    
     9
  • 无名
    2019-06-25
    我问这个问题的原因是看到SDWebImage 2.6版本的源码中释放内存缓存有两种方式:
    第一种:监听到内存不足时,释放所有内存缓存;
    第二种:当系统剩余内存小于12M时,释放内存缓存。

    刚开始版本是没有加第二种判断的。我的疑问是加上第二种判断有必要吗?如果有必要的话,那么就是,当系统只剩12M内存都还没有触发内存不足的通知。

    所以说这个内存不足通知是否在应用能给它分配的最大内存都全部使用完了才发出通知还是?
    如:当前app能使用的最大内存为2G,系统总共内存为4G。那是否说不管系统是否还剩余多少内存,只要app的内存达到2G就发出内存警告通知?还是说快到2G,如达到最大可用内存的百分之95以上就发出内存警告通知。有哪里可以看到这个值吗?
    展开
    
     2
  • 我唔知点死啊
    2019-04-18
    fishhook初学者提问:
    关于fishhook malloc_logger,在libmalloc中找到malloc_logger是一个结构体:
    typedef void(malloc_logger_t)(uint32_t type,
            uintptr_t arg1,
            uintptr_t arg2,
            uintptr_t arg3,
            uintptr_t result,
            uint32_t num_hot_frames_to_skip);

    fishhook malloc_logger没有任何作用,然后在_malloc_initialize方法里面,找到这句malloc_logger = __disk_stack_logging_log_stack;
    fishhhok __disk_stack_logging_log_stack同样不起作用,现在无从下手,请指教。

    我的fishhook方法如下:
    static void (*original_disk_stack_logging_log_stack)(uint32_t type_flags,
                                   uintptr_t zone_ptr,
                                   uintptr_t arg2,
                                   uintptr_t arg3,
                                   uintptr_t return_val,
                                      uint32_t num_hot_to_skip);
    void new_disk_stack_logging_log_stack(uint32_t type_flags,
                                   uintptr_t zone_ptr,
                                   uintptr_t arg2,
                                   uintptr_t arg3,
                                   uintptr_t return_val,
                                   uint32_t num_hot_to_skip) {
        NSLog(@"========== __disk_stack_logging_log_stack ==========");
    }

            struct rebinding malloc_logger_rebinding = { "__disk_stack_logging_log_stack", original_disk_stack_logging_log_stack, (void *)&original_disk_stack_logging_log_stack};
            rebind_symbols((struct rebinding[1]){malloc_logger_rebinding}, 1);
    展开
     1
     2
  • 徐秀滨
    2019-04-17
    老师,我没找到malloc_logger这个方法,没法hook,咋搞?
    
     2
  • drunkenMouse
    2019-04-14
    iOS通过堆栈管理所有的app进程,通过一个优先级最高的线程去监控系统内存的压力,还有一个快速对照表记录所有app的内存使用情况。如果内存有压力了,就按照优先级去释放优先级低还使用内存多的。

    所以app得内存阈值是没有固定大小的。我一直以为每个app可以使用的内存大小是固定的。。
    
     2
  • 鼠辈
    2019-04-11
    info.resident_size这个获取的内存和xcode上显示的内存是对不上的。不知道您怎么看这个问题?

    作者回复: 使用的字段不同,task_vm_info_data_t 还有个 phys_footprint 代表的实际使用的物理内存

    
     2
  • Jaker
    2019-04-16
    接上面的问题,问一下老师,task_vm_info_data_t的phys_footprint 打印输出的内存值和xcode的显示内存还是不一致啊,这是怎么回事,望解惑,谢谢。
    
     1
  • Calabash_Boy
    2019-04-13
    老师好,读完后有几个问题不得其解:
    (1) 在相同的设备和系统版本下,每个App的内存限制是不一样的么?我查看了手机的jetsamEvent,在per-process-limit中发现一个rpages是196.
    (2) 在vm_pressure_monitor线程的检测下,发现某App有了内存压力(理解为即将达到内存限制),然后会给该App发通知,然后您又讲到了优先级机制,这就有疑惑了,当某个App有压力的时候,是强杀这个App呢还是根据优先级去强杀后台的App呢?
    (3) 在测试struct mach_task_basic_info info;这段代码的时候,编译会报错Definition of 'mach_task_basic_info' must be imported from module 'Darwin.Mach.task_info' before it is required,是我没有导入某个头文件么?
    展开
     1
     1
  • 浩
    2019-04-11
    一直不知道内存分配最大值获取和怎么获取当前内存分配,看了文章豁然开朗,想问的是,老师这些知识都是通过分析源码得来的吗?
    
     1
  • RichardJ
    2019-08-20
    小结里说到访问未分配内存、向只读内存进行写操作的问题,戴老师可以举些例子说明下这两种情况怎么排查原因吗?
    
    
  • 夜空繁星
    2019-07-16
    除了膜拜,没别的。
    
    
  • 无名
    2019-06-25
    当系统还剩多少内存时,会发出内存不足的通知。

    作者回复: 本文都是围绕这个问题在说呢。会根据系统和硬件不同而定

    
    
  • 亡命之徒
    2019-06-25
    线上使用这种方式监控内存,苹果审核会通过嘛
    
    
  • mersa
    2019-06-02
    怎么知道谁调用了 malloc,来指导对应的堆栈信息
    
    
  • 二木又土
    2019-04-25
    JetsamEvent文件中搜索rpages,为什么有很多值,不同app能使用的最大内存大小是不一样的?
    
    
  • drunkenMouse
    2019-04-13
    系统在强杀App前,会先做优先级判断。意思是:如果优先级高的话,本来会强杀的也不强杀了,而去强杀那些没有达到limit的进程?

    作者回复: 强杀前系统会根据文后的策略判断应该优先强杀谁

    
    
  • drunkenMouse
    2019-04-13
    didReceivedMemory 动态获取内存值的方法,没有找到啊 大佬能说一下吗?

    作者回复: 是在 didReceiveMemoryWarning 回调里去获取当前 App内存使用值

    
    
  • drunkenMouse
    2019-04-12
    线程使用优先级时,CPU 占用多的线程的优先级会被降低。这句话怎么读不懂呢?

    利用didReceivedMemoryWarning 这个代理时间,看得我一愣。。应该是代理事件,我这算不算鸡蛋里面挑骨头?

    task_infk的使用需要导入<mach/mach.h>

    最后一段意思是,系统通过malloc_logger来统计并管理内存的分配情况?
    展开

    作者回复: 在你设置相同优先级的线程中,系统会有更细的优先级策略,这个策略就是哪个线程 CPU 占用高,优先级会比降低

    
    
  • Hy
    2019-04-12
    👌
    
    
  • mαnajay
    2019-04-11
    hook malloc_logger aop收集日志,然后在OOM那6秒内收集所有内存分配信息,然后在再次启动应用时 上报这两部分日志吗?
    oom那一刻是指的哪个时机,接受内存警告? didReceiveMemoryWarning 中判断 是否靠近 limit吗

    作者回复: OOM 是内存超标被系统强杀时

    
    
我们在线,来聊聊吧