Skip to content

介绍JVM虚拟机实现的培训PPT

前段给公司同事简单介绍了一些JVM虚拟机实现方面的知识,主要是针对某个产品希望自行研发类似引擎的需求,以JVM为例大概分析了一下虚拟机的架构,以及在静态模型和动态执行环境方面的一些设计思路。

J2SE 5.0和CLR 2.0之后,在虚拟机层面Sun和MS就基本没啥大改动,可以说这个领域基本上已经属于非常稳定和成熟。更多的关注被放到企业级应用的各种框架,以及动态语言和DSL领域特定语言的支持上。

但我始终以为,学习和了解一个类似JVM/CLR这样平台,最好的办法就是从底层静态文件结构着手,进而分析和理解其动态执行环境。这种学习方法虽然前期学习曲线较陡,但优点是可以完全无视各种文档里面的忽悠成分,直面语言和环境在设计之初的各种设计理念。毕竟你后期市场宣传忽悠的再天花乱坠,如果技术架构无法提供支持都是白扯。

最典型的案例就是CLR 1.0刚出来时,无论从静态文件结构还是IL指令集,都提供了对泛型的良好支持。因此当时在大家纷纷猜测时我就能非常确信,CLR 2.0或后续版本肯定会提供良好的泛型支持,而且大概知道能支持到什么程度。相反Java对泛型的支持,基本都只是通过annotation等机制模拟,缺乏JVM和byte code一级的有力保障,注定其实现方式倾向于在编译器层面模拟。江山轮流转,JVM对动态语言的支持,则是实实在在通过一系列JSR来完成;对应CLR反而是通过语言层面的DLR来模拟。

这方面比较靠谱的中文书籍并不多《深入Java虚拟机》关注JVM的架构,《虚拟机:系统与进程的通用平台》则是介绍更广泛意义上虚拟机的实现思路。如果只是希望深入了解Java和JVM,阅读《JAVA语言规范》虽然枯燥但确是最权威的。
深入Java虚拟机
JAVA语言规范
JAVA语言规范

{ 2 } Comments

  1. 自行研发的疑问 | 2011/01/17 at 15:07 | Permalink

    自行研发类似的引擎,工作量是否太大?
    JVM根据一种预先定义的语法,将其翻译为中间代码而非最终目标代码。实际上,在产品研发过程中,词法和语法解析工具可以满足绝大部分需求。广泛应用的pcap就是这样做的,它利用词法和语法解析工具直接将用户命令(如 -udp)转化为二进制,交由逻辑过滤层处理。
    可能个人经验欠缺,很难想象在哪一层需要自行研发类似的引擎。

  2. Flier Lu | 2011/01/17 at 20:53 | Permalink

    从头开始设计实现的话工作量不小,不过现在有大量开源实现可以参考,可以基于此类语言或虚拟机进行裁剪。不过具体怎么选择,得看实际项目需求,没有完全通用的方案。

Post a Comment

Your email is never published nor shared. Required fields are marked *

Get Adobe Flash player