运行时系统和虚拟机
运行时系统和虚拟机为程序提供执行环境,解释或编译中间代码,并管理运行程序所需的各种服务。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
运行时系统是支持程序执行的软件环境,其功能超出程序自身的代码;而虚拟机是一种抽象的执行引擎,它解释或编译可移植指令集,提供可移植性和运行时服务。
Scope
本主题涵盖编译代码与硬件之间的层:字节码解释器和抽象机、即时 (JIT) 编译、动态调度和方法查找、调用约定和堆栈管理,以及异常处理和反射等运行时服务。它探讨了可移植虚拟机的设计以及使托管语言高效的技术。
Core questions
- 虚拟机如何提供跨硬件的可移植性?
- 即时编译如何结合解释和原生代码?
- 动态调度和方法查找如何实现高效?
- 托管语言需要哪些运行时服务支持?
Key theories
- 可移植虚拟机架构
- Java 虚拟机规范定义了一种可移植、可验证的字节码和执行模型,展示了虚拟机如何将语言与特定硬件解耦。
- 即时编译
- Aycock 综述了运行时在执行期间将代码编译为原生形式的技术,通过运行时信息平衡解释启动与编译代码的吞吐量。
- 用于动态调度的内联缓存
- Deutsch 和 Schiffman 的 Smalltalk 实现引入了内联缓存和动态翻译,这是使动态调度语言中的方法查找快速的关键技术。
Clinical relevance
虚拟机和托管运行时为 Java、.NET、JavaScript 和 Python 等广泛使用的平台提供支持,实现了可移植性、安全性和自适应优化。JIT 编译和内联缓存是高级动态语言能够实现竞争性能的原因。
History
抽象机可追溯到早期的可移植系统和 Smalltalk,其 1984 年的实现开创了动态翻译和内联缓存。Java 虚拟机在 20 世纪 90 年代中期普及了可移植字节码,而 HotSpot 和后来的 JavaScript 引擎等自适应 JIT 编译器将激进的运行时优化带入了主流托管语言。
Debates
- 解释与即时编译之争
- 运行时设计者权衡了启动快、内存占用低的简单解释器与以预热时间和实现复杂性为代价实现更高峰值性能的 JIT 编译器,通常在分层系统中将两者结合起来。
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- 在此语境下,什么是虚拟机?
- 在此,虚拟机是一种软件执行引擎,运行可移植指令集(如字节码),抽象底层硬件并提供运行时服务,而非模拟整个计算机。
- 即时编译如何帮助提升性能?
- JIT 编译器在运行时将程序中频繁执行的部分翻译成原生代码,利用预先编译(ahead-of-time)编译器所缺乏的分析信息,从而使热点代码以接近原生速度运行。