关于本节课的一些疑惑
来源: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、具体收益要看投入产出比,比如虽然投入了两天的时间,但是方案可以在接下来的两年一直使用,就是划算的。
032020-09-08
相似问题