本文将重点介绍影响性能的不良实现,主要包含Binder共享内存耗尽、Binder线程池耗尽、创建大量BpBinder或Binder对象等方面。
为了更好地了解下文内容,我们先简单介绍一下Binder:
【注】由于Binder机制的复杂性,这里不展开介绍,仅简单概括,便于更好理解本文内容。
Binder属于一种IPC通信机制,是用来实现不同进程间通信的,主要由ServiceManager、Server(服务端)、Binder 驱动、Client(客户端)4 部分构成,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间。一次完整的 Binder IPC 通信过程通常如下:
1)Binder 驱动在内核空间创建一个数据接收缓存区;
2)在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;
3)发送方进程通过系统调用 copy_from_user()将数据 copy 到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,完成一次进程间的通信。
由于Binder在跨进程通信过程中担任着极其重要的作用,任何流程或异常都会带来负面影响。
01 Binder共享内存耗尽
Binder的性能(减少