java - 如何打印 "Hello World"? - 完整的生命周期

标签 java architecture compiler-construction operating-system

<分区>

我在研究生院学习了编译器、操作系统、计算机体系结构类(class)。但我想在一个简单但真实的例子中看到这些概念(不太理论化)。 HelloWorld 是简单示例的不错选择。

不仅这个小程序的生命周期很有趣,而且了解 JVM、OS 和 Architecture 的工作原理可以帮助我们成为更好的程序员。

简而言之,我的问题是:我是否正确完整地描述了这些步骤?

具体而言,我需要您在以下方面提供帮助:

  1. 指出我错的地方
  2. 我确定我遗漏了很多有值(value)的点,所以请添加任何在生命周期中有意义的点。

我想知道的是 HelloWorld 如何遍历每一层,然后从中返回。假设此程序在 Intel CPU 和 Ubuntu 上运行。

我会通过合并好的答案来更新这篇文章,直到最终接受一个答案。

下面是大家熟知的HelloWorld程序。

enter image description here

它被编译为字节码,如下所示。

enter image description here

字节码不可读,但我们可以使用 javap -classpath 。 -c HelloWorld 查看如下助记符。

enter image description here

然后它在 JVM 中被加载、链接和初始化。

enter image description here

由于它只有一个线程,我们假设它是以下JVM 运行时数据区中的左侧线程。

enter image description here

JVM线程是用户级线程,所以会映射到内核。在 Ubuntu 中,它是一对一的映射,如下所示:

enter image description here

现在 JVM 生成 x86 指令? (更新)

操作系统对该特定程序的作用是什么?

架构的下一步是什么?

以 5 步 MIPS 获取指令、解码、执行、内存访问、回写。

enter image description here

引用资料:

  1. OS basics
  2. Diagrams

这可能是一个非常困难的问题。与如何使用某个 API 的问题不同,这需要了解几乎所有内容。

最佳答案

A Java virtual machine (JVM) is a virtual machine that can execute Java bytecode. It is the code execution component of the Java platform.

http://en.wikipedia.org/wiki/Java_virtual_machine

图片由维基百科提供:

enter image description here

关于java - 如何打印 "Hello World"? - 完整的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311867/

相关文章:

java - 如何使用已部署的 QVTo Eclipse 插件

terminology - 在编译器构造中,符号是否与标记相同?

php - 如何修改php源代码并重新编译?

c# - 如果您被迫使用 Anemic 域模型,您将业务逻辑和计算字段放在哪里?

Python项目架构

javascript - AngularJS 中的嵌套模块

java - 在 Java 中构建 IDE 的最简单方法是什么?

java - 我是否应该允许实现类有可能破坏 API,否则可能会导致不利影响

java - public void main(String[] args) 是无效的 java main 方法签名吗?

java - 按周排序记录有帮助吗?