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