4

我想知道这是如何发生的:Java 程序如何映射到 OS 进程(如下面的 Linux 所示):
借自:linuxjournal.com

在 C 中,它是程序如何编写以及整个调用堆栈如何在操作系统中进行的直接关联。我想知道如何在 Java 中实现映射?方法 meth(),在对象上调用:obj,是否只是转换为定位 obj.meth() 的地址,然后在堆栈上使用它在 C 中的方式?

提前致谢!

编辑:我也很想知道其他 OOP 语言通常使用的模型(C++、Python 等)。

4

2 回答 2

4

这是一个相当复杂的问题。这是一篇关于这个主题的非常好的文章。简而言之,Java 有两种执行模式,它们极大地影响了内存布局。

  1. 一些代码由解释器执行
  2. 一些代码被编译为本机代码以获得更好的性能。

请参阅此 wiki 页面:http ://en.wikipedia.org/wiki/Just-in-time_compilation 。

并且 JVM 获得了更多类型的内存区域,例如 perm-gen、JIT 内存等。

这在其他线程中得到了很好的讨论:

  1. java和内存布局
  2. jdk1.6 内存布局
于 2012-05-15T23:10:52.223 回答
1

大多数 Java JVM 都是纯 C 程序。所以图片将与正在解释/执行的第一个类文件相同。

之后,它取决于 JVM 实现。通常,他们会使用堆栈存储来跟踪控制类型信息,例如加载了哪些类、正在运行哪些线程等。对于实际的“程序”存储,解释器和垃圾收集器将使用普通的“malloc”/“mfree”来存储分配和释放内存以及一些相当复杂的控制结构以使垃圾收集器能够正常工作。

于 2012-05-16T01:32:29.603 回答