请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于本节课的一些疑惑

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

正在回答 回答被采纳积分+3

1回答

随风绽放 2019-09-25 14:59:01

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

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 若邪913 #1
    多谢老师回答。
    1、我们判断任务CPU密集型还是IO密集型就是通过systrace这种类型工具去看实际耗时和cpu耗时的比重吗?如果是,这个cpu耗时占多少比重时就属于是CPU密集型?
    2、第二点还是不太明白这块,老师能讲个具体事例吗,启动阶段加载的类下载?下载下来哪些数据?
    回复 有任何疑惑可以回复我~ 2019-09-25 15:25:32
  • 小明12345 回复 提问者 若邪913 #2
    问题1也有同样的疑问,希望老师能解答下!
    回复 有任何疑惑可以回复我~ 2020-09-07 08:18:36
  • 同学你好,可以用 Systrace 去看也可以用代码去算,都是一样的,一般超过 60%就算作 CPU 密集型任务。
    回复 有任何疑惑可以回复我~ 2020-09-08 18:06:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信