<分区>
我在研究生院学习了编译器、操作系统、计算机体系结构类(class)。但我想在一个简单但真实的例子中看到这些概念(不太理论化)。 HelloWorld 是简单示例的不错选择。
不仅这个小程序的生命周期很有趣,而且了解 JVM、OS 和 Architecture 的工作原理可以帮助我们成为更好的程序员。
简而言之,我的问题是:我是否正确完整地描述了这些步骤?
具体而言,我需要您在以下方面提供帮助:
- 指出我错的地方
- 我确定我遗漏了很多有值(value)的点,所以请添加任何在生命周期中有意义的点。
我想知道的是 HelloWorld 如何遍历每一层,然后从中返回。假设此程序在 Intel CPU 和 Ubuntu 上运行。
我会通过合并好的答案来更新这篇文章,直到最终接受一个答案。
下面是大家熟知的HelloWorld程序。
它被编译为字节码,如下所示。
字节码不可读,但我们可以使用 javap -classpath 。 -c HelloWorld
查看如下助记符。
然后它在 JVM 中被加载、链接和初始化。
由于它只有一个线程,我们假设它是以下JVM 运行时数据区中的左侧线程。
JVM线程是用户级线程,所以会映射到内核。在 Ubuntu 中,它是一对一的映射,如下所示:
现在 JVM 生成 x86 指令? (更新)
操作系统对该特定程序的作用是什么?
架构的下一步是什么?
以 5 步 MIPS 获取指令、解码、执行、内存访问、回写。
引用资料:
这可能是一个非常困难的问题。与如何使用某个 API 的问题不同,这需要了解几乎所有内容。