CPU性能优化

CPU 问题无非分为以下三类:

CPU 资源冗余使用

关于这个问题,可以是算法太糙,明明可以遍历一次的却遍历两次,主要出现在查找、排序、删除等环节;也可以是没有 cache ,明明解码过一次的图片还重复解码。还有,明明使用 int 就足够,偏偏
要用 long ,导致 CPU 的运算压力多出 4 倍。

CPU 资源争抢

资源争抢也有几种经典情况。
( 1 )抢主线程的 CPU 资源。这是最常见的问题,关键是主线程起码在 Android
Handler 优化。
6.0 版之前,没有 renderthread 的时候,其繁忙程度就决定了是否会引发用户的卡顿问题。最经典的例子就是主线程的
( 2 )抢音视频的 CPU 资源。跟主线程的情况不同,音视频编解码本身就消耗了大量的 CPU 资源,同时音视频编解码对于解码的速度是有硬要求的,达不到就会有产生播放流畅度的问题,试想下,听
歌的时候总卡,是不是很难受。所以最常见的一种情况就是 CPU 满负载,除了在耗电上有非常恶劣的影响外,还会让音视频没有足够的资源保持流畅播放。怎么办?通过两点挪走压垮骆驼的稻草:第
一、排除非核心业务的消耗,如下面说的 QQ 音乐的案例,还有贴耳检测的频率控制;第二、优化自身的性能消耗,把 CPU 负载转化为 GPU 负载,最经典的就是利用 renderscript 来处理视频中的影像信息。
( 3 )大家平等,相互抢。前面两点都有主次之分,强弱之别,但是如果是 QQ 相册,我开了 20 个线程做图片解码,那就是相互抢,我们曾经就遇到过这样的问题,效果就是导致图片的显示速度非常
慢。这简直就是三个和尚没水喝的典型案例。因此按照核心数、控制线程数还是很有道理的。

CPU 资源利用率低

CPU 就是速度与负载的博弈,用得多会耗电、会卡顿,用得少也会有问题,像启动、界面切换、音视频编解码这些场景,为了保证其速度,不好好利用 CPU ,真对不起核心数的不断飙升。而导致无
法充分利用 CPU 的因素,除了前面说的磁盘和网络 I/O 外,还有锁操作、 sleep 等。其中锁的优化,一般在锁的范围上,主要是尽可能地缩减范围

1 . TOP 软件
TOP 软件大家应该是非常熟悉的了,依靠 adb shell top 就可以简单地列出进程的各种信息。缺点就是 TOP 本身的性能消耗就不少,所以我们在自动化测试里面的取值,一般不用 TOP 。下面举几个 TOP 的
小例子,如图 4-1 所示。


Screenshot_2024-05-10_14-29-16.png

( 1 )排除 0 %的进程信息: adb shell top | grep -v ' 0 % S ' 。
( 2 )只打印 1 次按 CPU 排序的 TOP 10 的进程信息: adb shell top -m 10 -s cpu -n 1 。
( 3 )指定进程的 CPU 、内存等消耗,并设置刷新间隔: adb shell top -d 1 | grep com.tencent.mobileqq 。
2 . PS 软件
adb shell ps -p -t -P -x -c [ PID ]的例子,即用 PS 软件来形象地处理进程的身份标识,如图 4-2 所示。


Screenshot_2024-05-10_14-29-37.png

3 . proc 下的 CPU 信息
cat /proc/ [ pid ] /stat ,如图 4-3 所示。


Screenshot_2024-05-10_14-29-53.png
Screenshot_2024-05-10_14-30-13.png

下面只重点介绍图 4-3 中几个关键数值的含义:

pid 进程号
tcomm 执行程序
state 进程状态
ppid 父进程号
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flagsmin_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
utime 用户态 CPU 消耗( user mode jiffi es )
stime 内核态 CPU 消耗( kernel mode jiffi es )
cutime 子进程用户态 CPU 消耗( user mode jiffi es with child's )
cstime 子进程内核态 CPU 消耗( kernel mode jiffi es with child's )

4 . dumpsys cpuinfo
通过执行 adb shell dumpsys cpuinfo 可以获取比起 TOP 更加简活精练的信息

5 . Systrace 、 Traceview 与 Trepn
这些工具都跟 CPU 相关。 Systrace 和 Trace View 作为定位工具,而 Trepn 会作为耗电的分析工具
Traceview已被弃用。如果您使用的是Android Studio 3.2或更高版本,您应该使用CPU Profiler来检查通过Debug类对您的应用程序进行插桩所捕获的.trace文件,记录新的方法跟踪,保存.trace文件,并检查应用程序进程的实时CPU使用情况。
https://developer.android.com/studio/profile/traceview
https://developer.android.com/studio/profile/cpu-profiler

android List的removeAll,找需要删除的ITEM要遍历一次,删除又遍历一次.影响性能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 系统平均负载 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU...
    safecdn阅读 624评论 0 0
  • 一、前言 前面讲了关于 内存 方面的优化,那么接下来的文章我们主要聚焦于 性能 的优化,那么主要体现在优化程序 速...
    wipping的技术小栈阅读 3,509评论 1 1
  • 方法论 首先,既然要做性能优化,那要怎么判断它是不是有效呢?特别是优化后,到底能提升多少性能呢? 第二,性能问题通...
    SnailFast阅读 1,533评论 0 1
  • 一、性能优化方法论 优化前,先思考以下三个问题? 1、既然要做性能优化,那要怎么判断它是不是有效呢?特别是优化后,...
    天堂_7f03阅读 2,003评论 0 0
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,680评论 2 59