关于本节课的一些疑惑

来源:3-12 启动优化其它方案

若邪913

2019-09-23

老师您好,由于平时对启动优化做的很少,这几节课下来有一些疑问:
1、在所有的启动阶段初始化的内容中,我们判断CPU密集型还是IO密集型,判断出来怎么去具体的处理他们,对于性能的提升有多大?比如课程中说的到,IO密集型可以发出来(具体哪个初始化忘了,就是执行了500多ms,实际CPU耗时只有27ms那个),这个发出来指的是什么,怎么发?
2、关于类的异步加载,在attachBaseContent中hook系统的classloader去打印出加载的类,这些类是启动用到的?那没用到的是哪些,这里如果没打印出来,岂不是目前还没加载,不需要去异步呀,如果都打印出来了,再去判断这些类哪些是在初始化中具体用到了,哪些是没用到,归类,将没用到的这些去放到异步加载?还有就是异步加载的具体方法是怎么执行。
3、这种优化类型已经是属于深度的优化了吧,具体小型项目中的开发成本已经高出实际写优化收益了把?

写回答

1回答

随风绽放

2019-09-25

同学你好,问题提问的非常好。

1、知道任务是IO或者是CPU密集型之后你就可以合理的安排CPU密集型的任务分配了,比如有10个任务都是CPU密集型的,那你就不要让这10个任务都同时出现在同一时间段内(超过最大核心数)。IO密集型的可以发出来,意思是说可以执行的多一些,就是异步线程执行它。

2、这条你理解错了,我是说第一次你去打印下载启动阶段加载的类,然后将这些数据保存下来,第二次就去异步加载它(不需要打印了,是使用第一次的结果)。异步加载就是在异步线程中使用Class.forName就行。

3、具体收益要看投入产出比,比如虽然投入了两天的时间,但是方案可以在接下来的两年一直使用,就是划算的。

0
3
随风绽放
回复
小明12345
同学你好,可以用 Systrace 去看也可以用代码去算,都是一样的,一般超过 60%就算作 CPU 密集型任务。
2020-09-08
共3条回复

Top团队大牛带你玩转Android性能分析与优化

由表及里学到国内Top团队对性能问题的体系化解决方案

1656 学习 · 527 问题

查看课程