最近在学习JIT编译器相关的知识,走了一些弯路,也总结了一些经验,今天分享一下我的JIT编译器学习路线和入门经验。

最近,我,在,学习,JIT,编译器,相关,的,知识,JIT,就是,Just-In-Time,即时,编译,的,意思,是,一种,在,程序,运行,过程,中,把,字节码,或者,中间,代码,动态,编译,成,机器码,然后,直接,执行,机器码,的,技术,这种,技术,在,很多,语言,的,运行时,里,都,有,应用,比如,Java,的,JVM,JavaScript,的,V8,引擎,C#,的,.NET,运行时,PHP,的,OPcache,和,JIT,等等,都,用,到,了,JIT,编译,技术,JIT,编译,是,一个,非常,有意思,也,非常,有,深度,的,技术,领域,但是,入门,门槛,也,比较,高,涉及,到,编译,原理,计算机,体系结构,操作系统,程序,语言,设计,等,多个,领域,的,知识,我,在,学习,的,过程,中,走,了,不少,弯路,也,踩,了,不少,坑,慢慢,才,找到,了,比较,合适,的,学习,路线,和,方法,今天,这篇,文章,就,来,分享,一下,我,学习,JIT,编译器,的,路线,和,入门,经验,以及,我,推荐,的,一些,学习,资源,和,方法,希望,能,给,同样,对,JIT,编译器,感兴趣,想,入门,的,朋友,一些,参考,少,走,一些,弯路,也,希望,能,和,大家,一起,交流,学习,共同,进步。

一、为什么要学习JIT编译器

先,说说,我,为什么,会,想,学习,JIT,编译器,其实,我,之前,对,编译器,相关,的,知识,一直,比较,感兴趣,大学,的,时候,也,学,过,编译,原理,这门,课,但是,当时,学,的,主要,是,传统,的,AOT,编译,就是,Ahead-Of-Time,提前,编译,的,意思,比如,C,C++,的,编译,就是,在,程序,运行,之前,就,把,源代码,全部,编译,成,机器码,然后,直接,运行,编译,好,的,机器码,而,JIT,编译,是,在,程序,运行,过程,中,动态,地,把,字节码,或者,中间,代码,编译,成,机器码,然后,执行,和,传统,的,AOT,编译,有,很大,的,不同,也,更,复杂,更,有意思,我,之前,在,工作,中,经常,会,接触,到,JIT,相关,的,内容,比如,Java,的,JVM,调优,的,时候,会,涉及,到,JIT,编译,的,参数,和,日志,JavaScript,的,V8,引擎,的,性能,优化,的,时候,也,会,涉及,到,JIT,编译,的,原理,和,机制,但是,我,对,这些,都,只是,一知半解,知其然,而,不知其所以然,很多,时候,只是,知道,有,这么,个,东西,但是,不,知道,它,具体,是,怎么,工作,的,也,不,知道,怎么,去,优化,和,调优,这,让,我,觉得,很,不舒服,也,很,有,挫败感,所以,我,就,决定,花,一些,时间,系统,地,学习,一下,JIT,编译器,的,原理,和,实现,把,这块,知识,的,短板,补,上,另外,我,也,觉得,JIT,编译,是,一个,非常,有,深度,也,非常,有,价值,的,技术,领域,学好,了,不仅,能,帮,我,更,好,地,理解,各种,语言,运行时,的,工作,原理,也,能,提升,我,的,技术,深度,和,解决,复杂,问题,的,能力,对,职业,发展,也,很,有,帮助,所以,我,就,开始,了,JIT,编译器,的,学习,之旅。

二、学习前需要的基础知识

在,说,具体,的,学习,路线,之前,先,说说,学习,JIT,编译器,需要,哪些,基础,知识,因为,JIT,编译器,是,一个,比较,综合,的,技术,领域,涉及,到,多个,方面,的,知识,如果,基础,知识,不,够,的,话,学习,起来,会,比较,吃力,也,很,容易,放弃,我,自己,在,学习,的,过程,中,就,因为,有些,基础,知识,不,够,走,了,不少,弯路,所以,先,把,需要,的,基础,知识,列,出来,大家,可以,先,检查,一下,自己,的,基础,够,不够,如果,有,欠缺,的,地方,可以,先,补,一补,再,开始,学习,JIT,编译器,这样,效率,会,更,高,也,更,容易,坚持,下来。

第一,是,编译,原理,的,基础,知识,这是,最,核心,的,基础,JIT,编译器,本质,上,还是,一个,编译器,所以,传统,编译器,的,各个,阶段,和,原理,都,需要,了解,比如,词法,分析,语法,分析,语义,分析,中间,代码,生成,代码,优化,目标,代码,生成,等等,这些,都是,编译器,的,基础,知识,不管,是,AOT,编译,还是,JIT,编译,都,会,用,到,这些,知识,所以,如果,你,之前,没,学,过,编译,原理,的,话,建议,先,找,一本,编译,原理,的,入门,书,看,一看,把,基础,打,牢,再,开始,学习,JIT,编译器,不,然,直接,看,JIT,相关,的,资料,会,觉得,很,难,也,很,容易,放弃,我,自己,大学,的,时候,学,过,编译,原理,但是,很多,知识,都,忘,了,所以,在,开始,学习,JIT,之前,我,先,花,了,一些,时间,把,编译,原理,的,基础,知识,复习,了,一遍,这,对,后面,的,学习,帮助,很,大。

第二,是,计算机,体系结构,的,基础,知识,JIT,编译器,最终,要,把,中间,代码,编译,成,机器码,而,机器码,是,和,具体,的,CPU,架构,相关,的,所以,需要,了解,一些,计算机,体系结构,的,知识,比如,CPU,的,基本,结构,寄存器,指令集,寻址,方式,流水线,缓存,等等,尤其是,要,对,某一种,具体,的,指令集,有,一定,的,了解,比如,x86,或者,ARM,因为,JIT,生成,机器码,的,时候,就是,生成,对应,指令集,的,机器,指令,所以,如果,对,指令集,完全,不,了解,的,话,学习,JIT,的,代码,生成,部分,会,很,吃力,我,自己,对,x86,指令集,有,一些,基础,的,了解,但是,不,够,深入,所以,在,学习,的,过程,中,也,补,了,一些,x86,汇编,和,指令集,的,知识,这,对,理解,JIT,的,代码,生成,帮助,很,大。

第三,是,操作系统,的,基础,知识,JIT,编译器,是,在,程序,运行,过程,中,动态,生成,机器码,然后,执行,的,这,就,涉及,到,内存,管理,进程,地址空间,内存,保护,等,操作系统,的,知识,比如,JIT,生成,的,机器码,需要,存放,在,内存,中,而且,这,块,内存,需要,有,可执行,权限,这,就,涉及,到,操作系统,的,内存,管理,和,内存,保护,机制,另外,JIT,编译,过程,中,的,内存,分配,缓存,管理,等等,也,都,和,操作系统,的,知识,相关,所以,需要,有,一定,的,操作系统,基础,知识,才能,更,好,地,理解,JIT,的,工作,原理,和,实现,细节。

第四,是,至少,一门,编程语言,的,深入,理解,JIT,编译器,一般,是,针对,某一种,具体,的,编程语言,的,运行时,的,比如,JVM,的,JIT,是,针对,Java,字节码,的,V8,的,JIT,是,针对,JavaScript,的,所以,要,学习,JIT,编译器,最好,对,某一门,编程语言,以及,它,的,运行时,有,比较,深入,的,理解,这样,学习,起来,会,更,有,针对性,也,更,容易,理解,比如,你,如果,对,Java,和,JVM,比较,熟悉,那,可以,从,JVM,的,JIT,开始,学,起,如果,对,JavaScript,和,V8,比较,熟悉,那,可以,从,V8,的,JIT,开始,学,起,这样,会,更,容易,入门,也,更,有,动力,我,自己,对,Java,和,JVM,相对,比较,熟悉,所以,我,主要,是,从,JVM,的,JIT,开始,学,起,的,然后,再,扩展,到,其他,语言,的,JIT,实现。

第五,是,一定,的,C,C++,编程,能力,大部分,主流,的,JIT,编译器,实现,都是,用,C,或者,C++,写,的,比如,JVM,的,HotSpot,是,用,C++,写,的,V8,引擎,是,用,C++,写,的,LLVM,是,用,C++,写,的,所以,如果,想,深入,看,JIT,编译器,的,源码,或者,自己,动手,实现,一个,简单,的,JIT,编译器,的,话,需要,有,一定,的,C,C++,编程,能力,当然,如果,只是,想,了解,JIT,的,原理,不,看,源码,也,不,自己,实现,的,话,C,C++,能力,不,是,必须,的,但是,如果,想,深入,学习,的,话,还是,建议,有,一定,的,C,C++,基础,这样,能,看,懂,源码,也,能,自己,动手,实践,学习,效果,会,更,好。

三、我的学习路线

说,完,了,基础,知识,再,说说,我,自己,总结,的,JIT,编译器,学习,路线,这个,路线,是,我,在,学习,过程,中,慢慢,摸索,出来,的,也,走,了,不少,弯路,才,找到,比较,合适,的,顺序,和,方法,分享,给,大家,参考,当然,每个人,的,基础,和,学习,习惯,不,一样,大家,可以,根据,自己,的,实际,情况,调整,适合,自己,的,学习,路线,不,用,完全,照搬,我,的。

第一阶段,是,入门,阶段,主要,目标,是,建立,对,JIT,编译,的,基本,概念,和,整体,认识,知道,JIT,是,什么,它,解决,什么,问题,它,的,基本,工作,流程,是,什么样,的,和,传统,的,AOT,编译,有,什么,区别,有,哪些,常见,的,JIT,实现,等等,这个,阶段,不,需要,太,深入,细节,主要,是,建立,整体,的,认识,和,基本,的,概念,我,在,这个,阶段,主要,是,看,了,一些,JIT,相关,的,科普,文章,和,入门,教程,比如,一些,介绍,JIT,基本,原理,的,博客,文章,还有,一些,介绍,JVM,JIT,或者,V8,JIT,的,入门,文章,这些,文章,一般,写,得,比较,通俗易懂,也,有,很多,图,帮助,理解,很,适合,入门,另外,我,也,看,了,一些,相关,的,技术,演讲,视频,比如,一些,技术,大会,上,关于,JIT,编译,的,演讲,这些,视频,一般,也,比较,直观,也,比较,有趣,能,帮助,建立,整体,认识,这个,阶段,大概,花,了,一到两周,的,时间,主要,是,利用,业余,时间,看,这些,入门,资料,建立,对,JIT,的,基本,认识,和,概念,这个,阶段,结束,之后,我,对,JIT,是,什么,基本,工作,流程,是,什么样,的,有,哪些,常见,的,实现,都,有,了,基本,的,了解,也,有,了,继续,深入,学习,的,兴趣,和,动力。

第二阶段,是,基础,阶段,主要,目标,是,深入,学习,JIT,编译,的,各个,核心,技术,点,和,基本,原理,比如,JIT,的,触发,机制,解释,执行,和,编译,执行,的,切换,热点,代码,探测,中间,代码,表示,编译,优化,技术,寄存器,分配,代码,生成,逆优化,和,去优化,等等,这些,都是,JIT,编译,的,核心,技术,点,需要,逐个,深入,学习,和,理解,我,在,这个,阶段,主要,是,找,了,一些,比较,系统,的,学习,资料,比如,相关,的,书籍,章节,和,比较,深入,的,技术,文章,逐个,技术,点,去,学习,和,理解,比如,学,热点,探测,的,时候,就,专门,找,介绍,JIT,热点,探测,原理,的,文章,看,学,编译,优化,的,时候,就,专门,找,介绍,JIT,常用,优化,技术,的,文章,看,这样,逐个,击破,把,每个,核心,技术,点,都,理解,清楚,另外,在,这个,阶段,我,也,开始,看,一些,具体,JIT,实现,的,文档,比如,JVM,HotSpot,的,JIT,相关,文档,V8,引擎,的,JIT,相关,文档,等等,通过,这些,具体,实现,的,文档,来,加深,对,各个,技术,点,的,理解,因为,抽象,的,原理,可能,比较,难,理解,但是,结合,具体,的,实现,来看,就,会,直观,很,多,也,更,容易,理解,这个,阶段,大概,花,了,一到两个月,的,时间,因为,每个,技术,点,都,需要,花,时间,去,理解,和,消化,不能,太,急,这个,阶段,结束,之后,我,对,JIT,编译,的,各个,核心,技术,点,都,有,了,比较,深入,的,理解,也,能,看懂,大部分,JIT,相关,的,技术,文章,和,文档,了。

第三阶段,是,实践,阶段,主要,目标,是,通过,动手,实践,来,加深,对,JIT,编译,原理,的,理解,也,锻炼,自己,的,实际,动手,能力,因为,光,看,理论,不,动手,的,话,很多,东西,理解,得,不,够,深入,也,很,容易,忘,所以,一定要,动手,实践,我,在,这个,阶段,主要,做,了,几个,事情,第一个,是,自己,动手,实现,了,一个,非常,简单,的,JIT,编译器,当然,不是,实现,一个,完整,的,JIT,编译器,那,太,复杂,了,而是,实现,一个,极简,版本,的,比如,针对,一种,非常,简单,的,中间,代码,或者,表达式,把,它,动态,编译,成,x86,机器码,然后,执行,这样,一个,极简,的,JIT,虽然,很,简单,但是,能,让,你,完整,地,走,一遍,JIT,的,基本,流程,包括,中间,代码,处理,机器码,生成,内存,分配,和,执行,等等,对,理解,JIT,的,基本,原理,帮助,非常,大,我,当时,是,参考,了,网上,一些,手写,极简,JIT,的,教程,和,示例,代码,自己,动手,写,了,一个,虽然,过程,中,遇到,了,很多,问题,也,调试,了,很,久,但是,最终,跑,起来,的,时候,那种,成就感,真的,是,无法,形容,的,而且,通过,这个,实践,我,对,JIT,的,基本,流程,和,原理,理解,得,深入,了,很,多,很多,之前,看,理论,觉得,懂,了,但是,动手,的,时候,才,发现,其实,没,真,懂,通过,动手,实践,才,真正,理解,了,第二个,实践,是,阅读,一个,开源,JIT,实现,的,部分,源码,当然,完整,的,JIT,实现,比如,HotSpot,或者,V8,的,源码,非常,复杂,也,非常,大,全部,看,完,不,现实,也,没,必要,所以,我,是,选,了,一个,比较,小,比较,简单,的,开源,JIT,实现,或者,选,了,一个,复杂,实现,中,的,某个,核心,模块,的,源码,来,阅读,比如,我,当时,看,了,一个,叫,Moonjit,的,开源,JIT,实现,的,部分,源码,它,相对,比较,小,也,比较,简单,适合,入门,阅读,通过,阅读,源码,我,对,JIT,的,具体,实现,细节,有,了,更,深入,的,理解,也,学到,了,很多,实现,上,的,技巧,和,方法,第三个,实践,是,做,一些,JIT,相关,的,实验,和,调优,比如,在,JVM,里,通过,参数,打开,JIT,的,日志,看,哪些,方法,被,JIT,编译,了,编译,花,了,多少,时间,生成,的,机器码,是,什么样,的,等等,或者,通过,调整,JIT,相关,的,参数,看,对,程序,性能,的,影响,通过,这些,实验,和,调优,能,更,直观,地,感受,JIT,的,工作,过程,和,效果,也,能,加深,对,JIT,原理,的,理解,这个,实践,阶段,大概,花,了,两到三个月,的,时间,因为,动手,实践,比较,花,时间,也,需要,调试,和,思考,但是,这个,阶段,的,收获,也,最,大,通过,实践,很多,之前,模糊,的,概念,都,变,得,清晰,了,很多,之前,觉得,难,的,东西,也,都,理解,了。

第四阶段,是,深入,阶段,主要,目标,是,针对,自己,感兴趣,的,某个,具体,方向,或者,某个,具体,的,JIT,实现,进行,更,深入,的,学习,和,研究,因为,JIT,编译,是,一个,非常,大,的,领域,不可能,什么,都,学,得,很,深入,所以,到,了,这个,阶段,就,需要,根据,自己,的,兴趣,和,需求,选择,一个,具体,的,方向,深入,下去,比如,你,如果,对,Java,和,JVM,感兴趣,就,可以,深入,研究,HotSpot,的,JIT,实现,包括,它,的,C1,和,C2,编译器,分层,编译,机制,各种,编译,优化,技术,等等,如果你,对,JavaScript,和,V8,感兴趣,就,可以,深入,研究,V8,的,JIT,实现,包括,它,的,Ignition,解释器,TurboFan,编译器,等等,如果你,对,编译,优化,技术,感兴趣,就,可以,深入,研究,各种,编译,优化,算法,和,技术,比如,内联,逃逸,分析,死代码,消除,循环,优化,等等,如果你,对,JIT,在,某个,特定,领域,的,应用,感兴趣,比如,数据库,的,JIT,表达式,编译,或者,AI,框架,的,JIT,编译,等等,也,可以,深入,研究,那个,方向,我,自己,因为,工作,中,接触,JVM,比较,多,所以,在,这个,阶段,主要,是,深入,研究,了,HotSpot,JVM,的,JIT,实现,包括,它,的,分层,编译,机制,C1,和,C2,编译器,的,区别,和,协作,各种,编译,优化,技术,在,HotSpot,中,的,具体,实现,等等,通过,这个,阶段,的,深入,学习,我,对,JVM,的,JIT,有,了,比较,深入,的,理解,也,能,在,实际,工作,中,进行,一些,JIT,相关,的,性能,分析,和,调优,了,这个,阶段,是,一个,长期,的,过程,因为,深入,研究,一个,方向,需要,花,很多,时间,也,需要,不断,学习,和,实践,我,现在,也,还,在,这个,阶段,继续,学习,和,深入,中。

四、推荐的学习资源

下面,推荐,一些,我,在,学习,过程,中,觉得,比较,好,的,学习,资源,给,大家,参考,当然,资源,很,多,我,只,列,一些,我,自己,看,过,觉得,比较,好,的,大家,也,可以,自己,去,发掘,更,多,好,的,资源。

书籍,方面,第一本,是,《编译原理》,也就是,大家,常说,的,龙书,这是,编译,原理,领域,的,经典,教材,虽然,比较,厚,也,比较,难,但是,非常,系统,也,非常,权威,想,深入,学习,编译,相关,知识,的,话,这本,书,是,必看,的,当然,不需要,全部,看,完,可以,重点,看,和,JIT,相关,的,章节,比如,中间,代码,生成,代码,优化,目标,代码,生成,等等,第二本,是,《高级编译器设计与实现》,也就是,大家,常说,的,鲸书,这本,书,更,侧重,高级,的,编译,优化,技术,也,比较,深入,适合,有,一定,基础,之后,看,想,深入,学习,编译,优化,的,话,这本,书,很,值得,看,第三本,是,《深入理解Java虚拟机》,也就是,大家,常说,的,周志明,的,那本,JVM,书,这本,书,里,有,专门,的,章节,介绍,JVM,的,JIT,编译,原理,和,机制,写,得,非常,好,也,很,通俗易懂,适合,想,了解,JVM JIT,的,朋友,看,第四本,是,《自己动手写编译器》,或者,类似,的,手工,实现,编译器,的,书,这类,书,会,带,着,你,从零,开始,动手,实现,一个,简单,的,编译器,通过,动手,实践,来,理解,编译,原理,很,适合,想,动手,实践,的,朋友,看。

文章,和,教程,方面,第一,是,MDN,上,关于,JavaScript,和,V8,引擎,的,一些,文章,比如,介绍,V8,引擎,工作,原理,的,系列,文章,里面,有,关于,JIT,编译,的,详细,介绍,写,得,非常,好,也,很,直观,适合,入门,第二,是,Oracle,官方,关于,JVM,和,HotSpot,的,一些,技术,文档,和,白皮书,里面,有,关于,JVM JIT,的,详细,介绍,和,原理,说明,比较,权威,也,比较,深入,适合,有,一定,基础,之后,看,第三,是,一些,技术,大牛,的,博客,和,技术,文章,比如,很多,做,编译器,或者,虚拟机,的,技术,大牛,都会,在,自己,的,博客,上,写,一些,JIT,相关,的,技术,文章,这些,文章,一般,都,很,有,深度,也,很,有,价值,值得,看,第四,是,一些,手写,极简,JIT,的,教程,和,示例,代码,网上,有,不少,这样,的,教程,会,带,着,你,用,很少,的,代码,实现,一个,极简,的,JIT,编译器,非常,适合,动手,实践,入门,我,当时,就是,参考,了,这样,的,教程,自己,动手,实现,了,一个,极简,JIT,收获,很,大。

视频,方面,第一,是,一些,技术,大会,上,关于,JIT,编译,的,演讲,视频,比如,QCon,InfoQ,等,技术,大会,上,经常,有,关于,JVM,V8,编译器,的,演讲,里面,会,介绍,JIT,相关,的,原理,和,实践,这些,视频,一般,比较,直观,也,比较,有趣,适合,入门,和,建立,整体,认识,第二,是,一些,大学,的,编译,原理,课程,视频,比如,MIT,斯坦福,等,名校,的,编译,原理,公开课,里面,会,系统,地,讲解,编译,原理,的,各个,方面,虽然,主要,是,传统,的,AOT,编译,但是,基础,知识,是,相通,的,适合,打,基础,第三,是,一些,专门,讲解,JIT,或者,虚拟机,的,系列,视频,教程,网上,也,有,一些,这样,的,教程,会,系统,地,讲解,JIT,的,原理,和,实现,适合,系统,学习。

开源,项目,方面,第一,是,HotSpot JVM,的,源码,这是,最,主流,的,JVM,实现,里面,的,JIT,实现,非常,成熟,也,非常,复杂,适合,有,一定,基础,之后,深入,研究,第二,是,V8,引擎,的,源码,这是,Chrome,和,Node.js,使用,的,JavaScript,引擎,里面,的,JIT,实现,也,非常,成熟,和,先进,适合,对,JavaScript,引擎,感兴趣,的,朋友,研究,第三,是,LLVM,的,源码,LLVM,是,一个,模块化,的,编译器,基础设施,很多,JIT,实现,都,基于,LLVM,来,做,比如,LLVM,自己,也,带,了,一个,JIT,执行,引擎,叫,MCJIT,或者,ORC,适合,想,了解,基于,LLVM,的,JIT,实现,的,朋友,研究,第四,是,一些,比较,小,比较,简单,的,开源,JIT,实现,比如,Moonjit,DynASM,等等,这些,项目,相对,比较,小,也,比较,简单,适合,入门,阅读,源码,不会,像,HotSpot,或者,V8,那样,太,复杂,看,不,懂。

五、学习中的一些建议和注意事项

最后,给,大家,一些,学习,JIT,编译器,的,建议,和,注意,事项,都是,我,在,学习,过程,中,总结,的,经验,和,教训,希望,能,帮,大家,少,走,弯路。

第一,不要,急于求成,要,循序渐进,JIT,编译器,是,一个,比较,难,也,比较,复杂,的,技术,领域,入门,门槛,比较,高,所以,一定,不要,急于求成,不要,想,一口,吃,成,个,胖子,要,循序渐进,从,基础,开始,一步,一步,来,先,建立,基本,概念,和,整体,认识,再,深入,各个,技术,点,再,动手,实践,再,深入,研究,某个,方向,按照,这个,顺序,来,会,比较,顺利,也,比较,容易,坚持,下来,如果,一上来,就,去,看,HotSpot,或者,V8,的,源码,或者,一上来,就,想,实现,一个,完整,的,JIT,编译器,那,肯定,会,被,难度,吓倒,也,很,容易,放弃,所以,一定,要,循序渐进,不要,急。

第二,要,重视,基础,知识,不要,跳过,基础,直接,学,高级,内容,很多,人,学习,JIT,的,时候,觉得,编译,原理,的,基础,太,枯燥,也,太,简单,不想,花,时间,看,想,直接,去,看,JIT,相关,的,高级,内容,但是,这样,往往,会,基础,不牢,后面,学,高级,内容,的,时候,会,很,吃力,也,很,容易,遇到,问题,解决,不,了,最后,放弃,所以,一定,要,重视,基础,知识,把,编译,原理,计算机,体系结构,等,基础,打,牢,再,开始,学习,JIT,的,具体,内容,这样,后面,的,学习,会,顺利,很,多,也,会,更,有,效果。

第三,要,多,动手,实践,不要,只,看,理论,学习,JIT,这种,比较,底层,也,比较,复杂,的,技术,只,看,理论,是,远远,不够,的,很多,东西,看,理论,觉得,懂,了,但是,真正,动手,的,时候,才,发现,其实,没,真,懂,而且,动手,实践,能,让,你,对,知识,的,理解,更,深入,也,更,牢固,所以,一定,要,多,动手,实践,比如,自己,动手,实现,一个,极简,的,JIT,编译器,阅读,开源,JIT,实现,的,源码,做,一些,JIT,相关,的,实验,和,调优,等等,通过,这些,实践,来,加深,理解,也,锻炼,动手,能力,不要,只,停留在,看,和,想,的,层面。

第四,要,学会,利用,各种,学习,资源,不要,只,看,一,本,书,或者,一,个,教程,JIT,相关,的,学习,资源,非常,多,有,书籍,文章,视频,开源,项目,等等,不同,的,资源,有,不同,的,角度,和,侧重点,也,有,不同,的,难度,所以,要,学会,利用,各种,资源,结合,起来,看,比如,入门,的,时候,看,科普,文章,和,视频,建立,整体,认识,深入,的,时候,看,书籍,和,官方,文档,学习,系统,知识,实践,的,时候,看,教程,和,开源,项目,动手,实现,这样,多种,资源,结合,起来,学习,效果,会,更,好,也,能,从,不同,角度,理解,同一个,知识点,理解,得,更,全面,也,更,深入。

第五,要,有,耐心,和,毅力,不要,遇到,困难,就,放弃,学习,JIT,编译器,肯定,会,遇到,很多,困难,和,问题,也,会,有,很多,时候,觉得,很,难,很,枯燥,很,有,挫败感,这,都是,很,正常,的,事情,不要,因为,遇到,一点,困难,就,放弃,要,有,耐心,和,毅力,坚持,下去,遇到,不,懂,的,地方,可以,先,记,下来,继续,往,下,看,可能,看,到,后面,前面,的,问题,就,理解,了,也,可以,去,网上,搜,一搜,或者,看,其他,资料,从,不同,角度,理解,实在,理解,不,了,的,可以,先,放,一放,等,后面,基础,更,扎实,了,再,回头,看,可能,就,理解,了,总之,不要,轻易,放弃,只要,坚持,下去,慢慢,就,会,越学,越,顺,也,越学,越,有,兴趣,和,成就感。

六、写在最后

JIT,编译器,是,一个,非常,有意思,也,非常,有,深度,的,技术,领域,虽然,入门,门槛,比较,高,学习,起来,也,比较,难,但是,一旦,入门,了,就,会,发现,这个,领域,非常,有,魅力,也,非常,有,价值,学好,了,不仅,能,帮,你,更,好,地,理解,各种,语言,运行时,的,工作,原理,也,能,提升,你,的,技术,深度,和,解决,复杂,问题,的,能力,对,职业,发展,也,很,有,帮助,我,自己,在,学习,的,过程,中,虽然,走,了,不少,弯路,也,遇到,了,很多,困难,但是,也,收获,很,大,不仅,学,到,了,很多,知识,也,锻炼,了,自己,的,学习,能力,和,解决,问题,的,能力,更,重要,的,是,让,我,对,技术,的,底层,原理,更,感,兴趣,也,更,愿意,去,深入,研究,这些,底层,的,东西,这,对,我,的,技术,成长,帮助,非常,大。

最后,希望,这篇,文章,能,给,同样,对,JIT,编译器,感兴趣,想,入门,的,朋友,一些,参考,和,帮助,少,走,一些,弯路,也,希望,大家,都,能,在,学习,JIT,的,过程,中,收获,知识,和,成长,也,享受,学习,的,乐趣,如果,大家,有,什么,好,的,学习,资源,或者,学习,经验,也,欢迎,在,评论,区,分享,出来,我们,一起,交流,一起,学习,一起,进步,谢谢,大家,的,阅读。