赣州新闻网

首页 / 科技

被美国卡脖子的科技领域21项核心技术!

2020-04-01 · 赣州新闻网 · 科技

这是why技术的第34篇原创文章

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

本周还是在家办公的一周,上面的图就是我在家的工位,和上周《Dubbo Cluster集群那点你不知道的事》这篇文章里面的第一张图片比起来,升级了显示器支撑臂,如果短还可以加长;[ p I ? { X .用上了机械键盘,让指= / - ? h X尖H , L C o e 9享i 1 | ? D受那一点点来自红轴的美妙反馈......

还是那句话:工欲善其事,必先利其器。在家办公,我是认真的。

图中显示器下面的两本书: 4 7 G 2 u e分别是《深入理解Java虚拟机》的第2版和第3版。也就是本文的主角。

你的手边有第2版吗?

来,翻到第57页。这$ 3 * _ A + V 里面有个“坑”,看看你当时发现了没,有没有在这页做笔记呢?

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

没有也没W b ? } f n U y关系,我. . . a = V带你先回顾一下这一页的内容,再让你看看我三年前第一次看这书的时候做的笔记。

第2版57q R u ) . + J v G页讲了啥?

也许你根本就没a L N N看过《深入理解Java虚拟机(第2版)》这本书。但是你一定见过位于本书第57页的示例代码:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

由于JDK 6常量池位于方法区,JDK 7以后常量池位于堆中,所以用[ c , # + c . . )两个版本的jdk跑上面的代码就会出现神奇的事情。甚至用JDK 8来跑,也会出现你想不 e o p键字,已存在常量池中”这句“骚话”。还正正经经的抄了上去,虽然是错误的描述,虽* X 1 *然字是丑了点......

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

你当年或者现在看的时候有这个疑惑吗?

之后我又完整的看过几次这本书,我清楚的记得,我再一次看到这里的时候我就觉得**“java是关键字,已存在常量池中”这个描述是不n ] d ^ A v | X :对的**,所以我在后面打了一把叉,再次去找了相关资料,找到了sun.misc.version,终于解决了“在哪出现的”这个问题。

第3版注脚填坑

这个2013% g t k N % u年(第/ 1 h k D二版出版那年)挖下的坑,在2016年10月1日,就被R大在知乎上给填上了_ = E { F / q :。R大的这个回答也被作者周志明写在了2019年底A & E C F F - R出版的《深入理解Java虚拟机(第三版)》的注脚里面:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

里面的RednaxelaFX就是R大,一个把虚拟机玩到极致,凭一己之力撑起了知乎v z n u * 4 H 3java半边天的男人,后面我会详细介绍一下的。

你只要了解到一点就行:他的回答,就是权威。

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

在R大的这个知乎回答中,帮周志明大大填了这个坑,w L E l 7 m p l l我强烈建a 5 M , *议你D 9 { r 2 h $ f一定要去` $ h ! t 7看看,链接如下:

ht; [ K w Ltps://www.zhihu.com/q2 2 x n b n (uestion/51102308/answer/124441115

R大帮忙填坑

我这里只是结合R大的回答和个人的一点点经 A d 4 !验,谈谈自己* / L c _ l Y ) ~ O过程去看他的回答吧,很强很硬核:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

我们可以看到sum.misc.Version里面的launc{ k a 7 3her_name字段的值就是“java”:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

而根据R大的回答,我们可以找到java.lanS ~ 9 G 6 ig.System类:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

根据System类的注3 s 9 ( F } M I释我{ & o I d h T们可以知; G H C A ; d H 4道,它是由虚拟机自动调用的。而且initializeSystemClass方法会调用sun.misc.Version.init()方法。

到此就真相大白了。

Java标准库在JVM启动过程中会$ r ( y K ( m调用sun.misc.Version的init()方法。所以sun.misc.Version会进行初始化的操作,而初始化时,会对静态常量字段进行真正的赋值操作,此时,sun.misc.Version的launcher_name字段所引用的字符串“java”就被intern到了字符串常量池里面了。

可以在心里在默默的复习一下类加载的过程 f !:加载、验证、= ) b = v Y 2 9 t准备、解析和初始化这五个阶段哦。

另外书中给出的示例代码也有一定的局限性,R大是这样说的:

其实这事情很简单:首先,这个行为必然是要针对某个具体的JDK/JRE| ! / y 9 :实现来讨论的,因为Java语言规范/JVM规范/Java SE标Z T + @ )准库的Java} C v : P h *Doc(q J ! f也是Java SE平台规范的一部分3 K =)都没有、也不会强制指定哪个类里一定要引用“java”这个字b U J # - ,符串常量,而且它必须是第一个使得“java”被intern的类 --- 规定这个也太无聊了。

比如这个示例我在JDK8uo e 9 T 6 4 Z212-b03上跑出来,就是两个true:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

在这个版本里面,sun.misc.VerM R o Nsion的launcher_na{ b 5 y ~me变成了“openjdk”:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

那么根据我们之前的猜测,把程序成下面这样r : Q K B的,效果就是一样的了:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

万变不离其宗,现在你知道为什么这里用openjdk返回也是false了吧。

知其然,还要知其所以然。

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

R大与周志明之间的“爱恨情仇”

R大是谁?

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

我先上一张《深( O k `入理解jh y D ^ g P ? V Qava虚拟机(第二版)》背面的一张图吧,R大给这本书写过推荐语:C ; h N

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

莫枢(Red9 8 Y d bnaxelaFx)Oracleu 8 g $ ^ R X D HotSpot VM编译器团队工程师。(现在他已经不在Oracle了。据网上公开资料,R大是前阿里巴巴技术专家,前Oracle JVM核心开发,前Azul核心开发,现就职于Databricks)

再看一下他的知乎主页:https://www.zhihu.com/people/rednaxelafx/answers

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

你去知乎上只搜RednaxelaFX(甚至直接用搜索引擎搜索),就能搜到很多结果,我随便截取一个片段。

在【有哪些顶级水平的中国程序员?】这个话题下,有一个回答只是@一下R大的ID,没有多说一个字,就获得了258个赞,评论中也满是赞美的语言,干货多,就是他的特点:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

他与《深入理解Java虚拟机》的作者周志明大大,在2010年到2011年间,在iteye上已经有过多次深度交流,比如下面的吐槽:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

比如下面的调T ! _ ) * r =侃:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

玩归玩,闹归闹,周志明也直言阅读了R大的很多文章,受益良多:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

并且在书里的致谢章节专门谢谢了R大N K ( y @ U (:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

说这么7 b b * 9 k 6 r O多,我想要表达的观点其实就是一个:

R大是一个宝藏啊,他乐于分享和交流,凭借一己之力推动了国内jvm的学习和研究 1 F a,如果你想要了解虚拟机、编译原理和编程语言方面的相关知识,他是一个你绕不过的人。他值得被更多的程序员知道。

如果K ( p r z你之前不知道,但看了我这篇文章后知道了他,我的目的就达到了。

他在知乎上认认真真码字,用心的对待每一个回答,他是一个\"码\5 + a P 7"宗强者,恐怖如斯,但是从他的+ k Z w Q { t 0各种回答、博客文章中,你可以感觉到谦逊、细致、系统、耐心、专业、严谨.....w I U 7就像一个f * # f评论说的:

在技术圈日益浮躁的今天,感觉他就是主席所说的那种:一m 4 x个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于U k i ( = } ~ } 5人民的人。

我们做程序的,要向他学习8 Y & } c ? ~ l 8,向他致敬。

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

最后再附上一个R大的资料合集链接吧,全是宝藏,待你去发掘:https://z^ ( S Y dhA K z g a . C Xuanlan.zhihu.com/p/25042028

最后说一句

才疏学浅,难免& T Z & G Q B t S会有纰漏,如果你发现了Q z [ ^ x 4错误的地方,还请你留, + O * v @ Q p b言给我指出来,我对其加以修改。

如果你觉得文章还不错P ^ 8 5,你的转发、分享、点赞、留言就是z ) } M f ^ c对我最大的鼓励。s I k : - w u U y

感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。

以上。

专业大学文章指出美国安远技术领域科技