1、1:找相关的书在看相关源码时应该对程序有整体了解,比如看虚拟机时至少要知道:垃圾回收算法,Java内存布局,class文件格式,加载连接的过程...很多人看源码一点头绪都没有,就是因为不了解对应的模块是干嘛的(比如Java是模板解释器,而不是字节码解释器,call_stub()是为了找到对应模板入口),了解这方面比较好的就是看官方文档,或者看对应源码解析的书,推荐:Java虚拟机规范(首推,有点像cookbook,反复看了两三遍,由于是规范,内容比较抽象)深入理解Java虚拟机(比上一本更具体,但是有的内容没有上一本丰富)揭秘Java虚拟机(这几本里面就这本讲解了虚拟机源码,但是比较啰嗦,希望第二版能改进。。)
2、2:工具看类库首推idea,多用Structure,多自动生成UML图。先搞清楚接口和类之间的关系,在去分析函数。
3、3:阅读注释有很多时候注释才说明一切,举几个很简单简单的例子,在IO阻塞的时候线程是出于BLOCKING还是RUNNABLE,线程的interrupt会中断那些函数?注释里都说的很清楚,看到函数的时候只要简单读读注释就知道了。
4、4:有目的性源码量那么大,不要妄想一口气都看完。最好符合你当前的目的,比如你想搞懂多线程,你就主要看JUC,想搞懂IO就多去看NIO,想看常量池就去看ClassFileParser。看模块的时候,要注意接口大于一切,或者说函数大于一切。先不要妄想搞懂所有细节,先找几个比较关键的函数,搞懂函数的作用(比如应该仔细分析一下函数名称和参数名称)然后再往下进行。再看Java类库的时候要多注意类是不是abstract的,是不是用的模板方法,多关注函数前的修饰词,这一般说明这个函数是给谁用的。多注意这些细节而不是傻傻的过一遍逻辑,能从里面学到不少关于设计的东西。还可以注意什么地方是为了之前的设计而委曲求全的做法,毕竟一个这么多年的类库,肯定不是什么地方都是完美的。
5、5:实验+debug可以多做做实验,ide的断点都很好用,记得之前看tomcat的源码就一直debug。
6、6:不要介意看别人的博客,不要介意手抄笔记实在看不懂了不要硬抠,太耽误时间,毕竟学习才是硬道理。找找别人的博客,你要相信你再看的东西以前也一定有人看过,并且记录下来了。不要介意看官方文档,也不要带着敬畏的心里去看,不过就是一份文档而已。翻译的资料,二手的资料,可以看,但是要分辨好坏。