借着华为方舟虚拟机,简单提一下jvm里几个有趣的知识点。
《深入理解Android ART JVM》第六章是专门讲dex字节码如何编译成机器码的。这一章也是全书最难,页数最多的
但可以跳过去看,属于本书的基础技术部分:
第六章首页
第六章的最后,我特意解释了,即使java字节码编译成机器码,其运行也是离不开虚拟机的管控,这些机器码叫managed code。它们和非虚拟机管控运行的程序区别见下面几个图。
虚拟机管控运行的机器码
虚拟机为什么要管控运行呢?接着看下图
以上就是managed code和虚拟机的关系。
除此之外,根据java语言的特性,某些数组越界的处理逻辑还要从机器码运行态退化为解释模式执行(HDeoptimize处理)。来看图:
HDeoptimize的说明
下面是一个触发HDeoptimize的程序示例:
HDeoptimize的示例
从HDeoptimize可以看出,JVM是为Java语言本身关系及其紧密。
简单来说,源码写成什么样的逻辑,无论是解释执行还是机器码执行都得按这个逻辑来执行。按华为方舟编译器介绍的那样,这是一个类似翻译的工作。再牛、再快的编译器,如果翻译错了,就毫无价值。
JVM、编译技术属于基础关键技术,但感觉绝大部分开发并不真正了解它们。这种现象的原因有很多,可能比较关键的一个问题是没有合适的书籍。编译领域中的龙书,虎书很难。而能从JVM源码角度来介绍JVM的更是绝少有。
我们都希望基业长青。显然,基业长青离不开对基础技术的坚守.但是一方面我们也要降低入门门槛,让更多人有机会看到它,亲身接触到它,然后才是扩展和完善它。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8