java就是一门工具
本质上跟你开的车没什么区别
java的熟练程度,就犹如你的驾驶技术
本质上就是工具操作的熟练度
对于工具的操作而言,绝大多数人,会用就行了
源码基本上没有深入的必要
因为对于绝大多数程序员以及非程序员而言,这个轮不到你去做
开发java的jdk那些东西,人满为患,多的是人在做这事
这个领域,并不缺人
而且有的是各种乱七八糟的企业,在给openjdk贡献,也就是修bugs什么的
这是jdk从11到18的各个企业的贡献列表,你可以看到,上面什么乱七八糟的企业都有
国外大厂尤其多,什么google,ibm,red hat,sap这些,全都在这上面,甚至intel,amd什么
所以各位,尤其是那些身在国内,连phd都没读下来的同学,千万不要自我感动啊
java不缺任何人,世界非常大,jdk的发展有的是人在干这事
搞技术的经常会有种误解,误以为,你不做,这事就不发展了
但其实你真的懂的话,就应该知道,jdk这么大的东西,全球几十亿设备在用的工具
怎么可能会因为某一个技术员不搞了,它就不运转了
对不对?
这就好像泰坦尼克的铲煤工人,以为自己不铲煤了,泰坦尼克就不运转了
肿么可能
一个道理
所以对于java而言,能熟练使用,就足够了
深入源码,完全没有必要,我说的是在起步阶段
当然可能随着你在某个组织的发展,掌握了越来越多的社会资源,你有足够的资源了,可以开始贡献这种东西了,那时候,你再去看源码,再去参与这些全球性项目的合作,也不迟
当然,一个比较合理的参与方式就是
你先把phd给读了,最少master吧,最好在国外读
为什么呢?
因为下一代jdk,也就是graal,在全球范围内,招实习生
这个本质上就是java的自举,用java来实现jdk,来替换以前用c++实现的代码
这个项目可以追溯到99年,也就是做了20多年,sun发布jdk 1.2开始,就在尝试自举了
jdk作为编译器,分为前端和后端嘛,前端就是javac,那个已经完全用java实现了,当然用c做了一个wrapper,但是核心全部都是java代码
后端也就是jit,以及包含有jit的jvm,这个现在还是c++写的
那graal的出发点就是,用java实现jit,以及jvm
这个在jep里面,叫做jvmci,直接替换c++写的c1/c2[1]
那将来,java肯定会走向自举,实际上现在这个迹象已经非常明显了
openjdk主要是一些老头子在搞,你看openjdk几个project的team lead,全部都在50多岁,甚至更老,很多是从sun时代起,就在搞java的工程师
但是graal呢,是一个sun当年的实习生,在做,这个team lead现在才30多岁,比很多知乎上的老程序员还要小
这个人,代表着将来,因为openjdk那些老c++程序员,再干几年就退休了
实际上现在像red hat(看上面各个公司的贡献数量,red hat毫无疑问是第二把交椅)等企业,对于graal的兴趣,远远大于openjdk
因为java代码,写起来,就是比c++代码简单啊
维护成本也要低很多
c++写的openjdk,一年发两个版本,两年一个lts
java写的graal,一年发四个版本,一年一个lts
你说哪个开发速度快?
所以graal在将来,一定会替换掉openjdk,而且graal的功能还更多,比如能够aot,能够编译成机器码,这个就是目前jvm还做不到的,当然有一个project leyden,但是目前看,project leyden很有可能用graal做,而不是用c++写,因为graal的native image已经得到了比较广泛的应用
你可以看到,netty,vert.x,spring,micronaut,heliden等java项目,几乎都在往native image上转,几乎都可以做native image,老外都在这么干,为什么不嘛
将来就算project leyden启动,大概率,也还是会用graal,而不是用c++去写,因为graal在这一块,已经领先很多年了
所以,如果你真要参与java的研发
你最好的介入点,应该是graal,而不是openjdk的那些c++源码
那些东西,将来还能用多久,不知道的,因为替代品已经出现
性能更好,graal jit哪怕不做任何调整,直接替换openjdk里面的c2,都能有显著提升
这个你可以在网络上找到n多老外的benchmark
直接上google了
简单翻译就是,无论从哪一方面看,graal都明显优于jdk里面的jvm里面的jit编译器,也就是c2
所以如果你有志于此,最好的方式
就是把你的本科的成绩好好提一提,拿出一个比较漂亮的gpa
然后把gre和托福考掉,然后申请到国外大学的奖学金,攻读phd,也就是博士学位
graal本身就是一个科研项目,有提供这方面的奖学金,链接在前面
如果你做不到
那你算了吧,你深入个p源码,别自我感动了,你会用就行了,没有人指望你去懂什么java源码
你懂了也没用
当然,话说回来,这里不考虑面试时候有人故意问这些问题
那这种东西,我建议你背一背,你知道这些没啥用的知识只是用来应付面试就好了
就像java面试很喜欢问的jvm调优技巧,如何tune cms gc
现在cms都被删掉了
但是那些老技术员,只懂这些老旧技术,那你要给他点面子,要不然面试不让你过