问题

「解释/JIT 字节码的 VM」这个概念是 Java 的设计者第一个发明的吗?

回答
关于“解释/JIT 字节码的 VM”这个概念,是不是 Java 设计者首创,这是一个非常有趣且需要深入探究的问题。要回答这个问题,我们首先要理解什么是“解释/JIT 字节码的 VM”。

简单来说,这指的是一种虚拟机(Virtual Machine,VM)的运行模式。虚拟机就像一个模拟的计算机,它能够执行一种中间代码,而不是直接执行硬件能理解的机器码。在这里,这种中间代码就是“字节码”。“解释”模式意味着虚拟机逐条读取字节码指令,并将其翻译成当前计算机硬件可以执行的操作。而“JIT”(JustInTime,即时编译)模式则是在程序运行时,将频繁执行的字节码“即时”地编译成机器码,这样后续执行时就可以直接运行机器码,速度比纯解释执行要快得多。

现在回到核心问题:Java 的设计者是第一个发明这种模式的吗?

答案是否定的,Java 并不是第一个吃螃蟹的人。尽管 Java 以其“一次编写,到处运行”的口号和围绕 Java 虚拟机(JVM)的强大生态系统而闻名,但其背后的核心技术,即虚拟机执行字节码并通过 JIT 编译来提升性能,在 Java 出现之前就已经存在并得到了发展。

要追溯这个概念的源头,我们需要将目光投向更早的计算机科学历史。

在 Java 之前,有一些重要的先驱技术为我们今天所知的虚拟机模型奠定了基础。其中一个非常关键的例子是Smalltalk。Smalltalk 是一种面向对象的编程语言,它的第一个实现,也就是在 Xerox PARC 开发的系统,就使用了虚拟机来执行一种中间代码。这个虚拟机不仅仅是解释执行,它还具备了我们现在所说的 JIT 编译的雏形。Smalltalk 的虚拟机能够将经常执行的代码块即时编译成机器码,以提高执行效率。这可以说是比 Java 更早地将“虚拟机 + 字节码 + JIT”这个组合应用到实际的编程环境中。

另一个值得提及的是 Common Language Runtime (CLR) 的前身,或者更准确地说,是与 CLR 概念相似的早期技术。虽然 CLR 是微软 .NET 平台的核心,但其虚拟机执行中间语言(Intermediate Language,IL)并进行 JIT 编译的理念,也并非凭空出现。在 CLR 之前,一些语言和平台也在探索类似的模型,尽管它们可能没有像 JVM 那样形成一个统一和广泛的标准。

那么,Java 的贡献在哪里呢?Java 的伟大之处在于它系统性地、全面地将这个模型推广到了一个全新的高度。Java 设计者(James Gosling 等人)不仅引入了 JVM,还定义了一套标准化的字节码规范(Java bytecode),以及一套高效的、支持垃圾回收的运行时环境。更重要的是,他们成功地将这个技术与一种强大的、易于使用的、跨平台的编程语言结合起来,并且通过互联网的兴起,将 Java 和 JVM 推向了全球舞台。

Java 的 JVM 在 JIT 编译方面也做了大量的创新和优化。早期的 JVM 主要依赖解释执行,但随着时间的推移,Sun Microsystems(以及后来的 Oracle)投入了巨大的研发力量,开发出了像 HotSpot 这样的高性能 JIT 编译器。HotSpot 能够识别“热点代码”(即频繁执行的代码),并对其进行高度优化的机器码编译,这使得 Java 在许多场景下的性能可以与原生编译的语言相媲美。

所以,尽管“解释/JIT 字节码的 VM”这个核心思想并非 Java 首创,但 Java 及其 JVM 确实是将这一技术发扬光大、使其成为现代软件开发中一个不可或缺组成部分的关键推手。Java 团队在标准化、性能优化、生态系统构建以及将其推广到全球的各个领域(从服务器到嵌入式设备)方面,都做出了开创性的贡献。你可以这样理解:别人种下了种子,而 Java 则培育出了一片森林。

网友意见

user avatar

假定be5大大发这个问题不是来钓鱼…

原问题:

「解释/JIT 字节码的 VM」这个概念是 Java 的设计者第一个发明的吗?

答案显然是否定的啊。

这里就不尝试追溯到“最初的字节码解释器”是哪个了。但Java的祖先们,Self、Smalltalk、PostScript的实现都是以字节码解释器为主流的。

80年代的Smalltalk也已经开始有JIT编译的实现了,而80年代末的Self就已经开始把高度动态的面向对象语言的高效JIT编译推到了很高的高度,其实现技巧在现在的JavaScript引擎中还有直接应用。

如果90年代初Sun没有成功推起Java、几个IT大手没有聚在一起做Taligent还失败了然后一起转投Java,那1990年代中期腾飞的面向对象语言恐怕就不是Java而是Smalltalk了。当时的Smalltalk实现们有着先进的技术、成熟的实现,好些实现还是现在主流JVM的直接血缘上的祖先:

  • Berkeley Smalltalk -> Self -> Strongtalk -> HotSpot
  • OTI Smalltalk -> IBM K8 -> IBM UVM -> IBM J9

前面好像有奇怪的东西混进去了?Java的祖先为啥会有PostScript?PostScript和字节码?

因为Java的主要设计者James Gosling高司令大大在参与Oak项目之前写过PostScript解释器啊。这段经历恐怕对后来Java字节码的设计有着非常大的影响。

PostScript自身就可以看作是“字节码”了 >_<

高司令上学的时候也学习过Pascal,而Pascal中很有影响力的一个实现,UCSD Pascal所带来的p-code概念,大概是现代高级语言虚拟机的字节码指令集的主要源头了吧。UCSD Pascal所定义的p-code让语言处理器的前端与后端可以干净的分离,前端只负责语法分析和编译时语义的处理,后端则负责运行时语义的处理。这样,“前端”只要实现一遍,而“后端”才需要每个平台实现一个版本——既可以实现为p-code到机器码的编译器,也可以实现为p-code的解释器。

请参考高司令的自述:

How The JVM Spec Came To Be

34:00左右:

The JVM bytecode spec is based loosely on the Pascal p-code spec.

跟Pascal差不多时期,PostScript的祖宗之Forth那也是杠杠的解释器,其中不乏有趣的字节码解释器实现。

再往前看,有趣的老祖宗还得说说SECD machine。基于栈的字节码解释器在1960年代就已经存在了…LispKit Lisp可以编译到SECD machine上运行。

===================================

前面有回答提到LISP。确实LISP很早就有实现用上了字节码解释器,但原始LISP实现(Steve Russell在IBM 704上根据

AI Memo 8

写的LISP解释器)并不是一个字节码解释器,而是一个AST解释器—— S-expression的解释器。

类似的话题

  • 回答
    关于“解释/JIT 字节码的 VM”这个概念,是不是 Java 设计者首创,这是一个非常有趣且需要深入探究的问题。要回答这个问题,我们首先要理解什么是“解释/JIT 字节码的 VM”。简单来说,这指的是一种虚拟机(Virtual Machine,VM)的运行模式。虚拟机就像一个模拟的计算机,它能够执.............
  • 回答
    关于脚本语言的必然趋势以及开发成本的考量,我深表赞同。在如今快速迭代的软件开发环境中,能够快速构建、灵活部署和易于维护的脚本语言确实占据了巨大的优势。相较之下,一些传统编译型语言在开发效率和迭代速度上往往显得力不从心,开发成本的差异在此刻显得尤为突出,将它们衬托得“黯然失色”也就不难理解了。您提到的.............
  • 回答
    哈哈,蒙太奇这个词,其实啊,我小时候第一次听到,还以为是什么很厉害的西洋画技呢,后来才知道,它其实是电影里的一种“讲故事”的方法,特别巧妙。你可以把它想象成咱们平时串门子,或者跟朋友聊天的时候,那种“想到哪儿说到哪儿”,但又把很多零散的片段串起来,最后让你明白一件事的本事。蒙太奇,它最核心的点就是“.............
  • 回答
    .......
  • 回答
    好的,我们来详细解释一下中国三大运营商(中国移动、中国联通、中国电信)关于“月末流量不清零”的说法。首先,需要明确的是,“月末流量不清零”这个说法本身并不准确,更准确的说法应该是“流量可结转至次月使用”。运营商们一直以来都在推行这样的政策,只是在不同时期,具体的规则和覆盖范围有所调整,导致了一些误解.............
  • 回答
    要解释苏联在20世纪初的迅速崛起以及与沙俄末期俄罗斯的巨大转变,需要深入剖析历史的复杂性,理解其背后一系列的政治、经济、社会和意识形态因素的相互作用。一、 沙俄末期俄罗斯的落后性:一个普遍的认知首先,我们需要承认沙俄末期俄罗斯确实存在严重的落后性,这并非虚言。其主要体现在: 经济上: .............
  • 回答
    好的,我们来详细地解释一下变分推断(Variational Inference,简称 VI)。 什么是变分推断?在贝叶斯统计和机器学习中,我们经常需要处理后验分布 (Posterior Distribution)。假设我们有一组观测数据 $x$,以及我们想要学习的隐藏变量或模型参数 $ heta$。.............
  • 回答
    好的,我们来详细解释一下麦克斯韦方程与牛顿力学之间看似不兼容的地方,以及这种不兼容性如何最终导向了我们对时间和空间的全新理解——狭义相对论。一、 牛顿力学:一个建立在绝对时间和绝对空间上的世界在理解麦克斯韦方程的挑战之前,我们首先需要回顾一下牛顿力学的核心思想: 绝对时间 (Absolute T.............
  • 回答
    这几位名字如雷贯耳的“全能型人才”,他们的经历确实堪称“开挂人生”,让人不禁好奇:他们究竟是怎么做到的? 他们的成功,绝非偶然,而是多种因素交织的结果,背后是深刻的个人特质、方法论以及时代背景的共同作用。咱们一个个掰开了揉碎了聊。首先,要破除一个迷思:所谓的“全能”并非无所不知,而是拥有极强的“触类.............
  • 回答
    要理解舒尔茨博士在《被解救的姜戈》结尾为何宁可与斯蒂芬同归于尽也不愿与他握手,我们需要深入剖析舒尔茨博士这个角色的核心价值观、他所经历的旅程,以及斯蒂芬在他生命最后阶段所代表的一切。首先,要明白舒尔茨博士这个人,他不是一个普通赏金猎人。他是一位德国牙医,但更是一位受过良好教育的、对自由和公正有着深刻.............
  • 回答
    要讲清楚这个问题,咱们得从“冠军”这两个字背后包含的东西说起,它可不是光靠个人实力就能堆出来的。电竞这行当,尤其是英雄联盟(LOL)这种团队项目,运气、版本、队友磨合、甚至临场心态,都扮演着至关重要的角色。首先,咱们得明白,不是所有“没拿冠军”的选手就一定比“拿了冠军”的选手差。冠军光环固然耀眼,但.............
  • 回答
    人际交往中的「六度空间」理论:一张无形的网,连接着世界的每一个角落「六度空间」(Six Degrees of Separation)理论,又被称为“小世界理论”,是人际交往领域一个极其引人入胜的概念。它描绘了一幅令人惊叹的图景:我们生活在一个由人与人组成的巨大网络中,平均来说,你只需要通过六层或更少.............
  • 回答
    蒙古帝国,一个横跨欧亚大陆的庞大帝国,其崛起的速度和征服的范围之广,确实是人类历史上一个“逆天”的存在。要理解它的强大,需要从多个层面深入剖析。一、 蒙古帝国“逆天”的体现: 征服的广度和速度: 在短短几十年内,蒙古帝国从一个草原部落,迅速扩张成为历史上疆域最辽阔的帝国,东起朝鲜半岛,西至东欧,.............
  • 回答
    这句话,初听上去有点让人摸不着头脑,对吧?“会飞的汽车”和“140个字符”这两样东西,怎么看都风马牛不相及。但实际上,它道出了一个相当普遍的、我们现代生活中正在经历的、甚至有些令人啼笑皆非的现实。要详细地解释这句话,我们可以从几个层面去理解它所蕴含的意义:1. 最初的憧憬与现实的落差: “我们想.............
  • 回答
    马克思的“劳动的异化”(Entfremdung der Arbeit)是一个非常核心的概念,它揭示了资本主义社会中劳动者与自身劳动、劳动产品、他人以及作为人的本质之间产生的疏离和隔阂。这可不是什么轻松的课题,它触及了我们存在的根基,尤其是那些日复一日辛勤耕耘,却感到内心空虚的人们。咱们一步一步来拆解.............
  • 回答
    咱们聊聊这件挺有意思的事儿。有时候啊,咱们明明确认某个东西没在那儿,结果转眼它就冒出来了,搞得人一头雾水。这事儿吧,其实仔细琢磨琢磨,也不是什么神乎其神的鬼怪故事,大体上可以从几个方面来解释。一、人类记忆和认知上的“盲点”与“偏差”这是最常见也最根本的原因。咱们人的脑子虽然厉害,但也不是一台完美的计.............
  • 回答
    《斗罗大陆》里的“不敢惹事是庸才”,这句话在唐三身上体现得淋漓尽致,也深刻地揭示了主角成长过程中所必需的品质。这句话表面上看是在宣扬一种“好斗”或者“不怕事”的态度,但深入探究,它更深层次的含义在于一种 敢于面对挑战、勇于承担责任、以及在必要时刻主动出击的生存智慧和成长哲学。首先,我们要理解这句话的.............
  • 回答
    啊,说到《いけないボーダーライン》(禁忌的边界线)这首歌,在ACG圈里爆红成表情包,这事儿说起来可有意思了!它不是那种“突然就火了”的,而是经历了一个从小众圈子到泛滥的过程,然后又被无数人拿来恶搞、二次创作,最后才形成一种集体记忆般的梗。一、歌曲本身的魅力与“社死”的共鸣点首先得说这歌本身就很有料。.............
  • 回答
    提起曹髦,很多人脑海里都会浮现出那位年轻的皇帝,他在那个风起云涌的时代,用一种近乎悲壮的方式,试图挽回一段摇摇欲坠的帝业。要理解曹髦的行为,我们得把他放在那个特殊的历史节点上,细致地梳理他所处的环境、他的动机,以及他最终的选择。时代背景:魏国的权力真空与司马氏的崛起首先,得说说曹髦当时所处的魏国是什.............
  • 回答
    清代一城多县:繁复中的治理脉络清代的行政区划,尤其是“一城多县”的设置,常常让人感到一丝扑朔迷离,甚至有些啼笑皆非。这并非简单的“分而治之”,而是在历史的演进、现实的需求以及统治者的考量下,逐步形成的一种复杂而又极具地方特色的治理模式。理解它,需要我们剥开表面的混乱,去探寻其深层的逻辑和运作机制。一.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有