4

我想知道这是如何发生的:一个Java程序是如何映射到系统进程(如下面的Linux所示):
borrowed from: linuxjournal.com映射Java程序的操作系统进程

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

在此先感谢!编辑:我也很想知道其他OOP语言在一般情况下使用的模型(C++,Python等)。

+0

请注意,即使是C,给定的图片已经是一个严重的简化。例如,不一定只有一个堆(如果有很多想要分配内存的线程,那么只有一个堆是个不错的主意),然后是线程特定的数据等等。魔鬼在细节上,如果你考虑简单的C运行时会有多复杂,那么想象一下JVM的外观如何:) – Voo

+0

当然,我只想讨论一个简单的单线程进程:) –

回答

4

这是一个相当复杂的问题。关于这个话题,这是一个很不错的article。总之,Java有两种执行模式,这对内存布局有很大的影响。

  1. 一些代码由intepreter
  2. 一些代码执行被编译为本地代码获得更好的性能。

看这片保养页:http://en.wikipedia.org/wiki/Just-in-time_compilation

和JVM得到了更多类型的存储器区域,如烫发根,存储器用于JIT等

在其他线程这是公讨论:

  1. java and memory layout
  2. jdk1.6 memory layout
+2

那么我在其他两个主题中不会说它是“充分讨论”的。但是JVM的内存布局非常复杂,就像你说的那样,这意味着a)没有多少人能够认​​真回答这个问题(我不能;我知道存在什么内存空间以及基本做什么,但是布局或其他细节?咬我)和b)即使有人想要它会是一个相当笨拙的职位。不知道它是否适合SO。 – Voo

1

大多数Java JVM都是纯C程序。因此,图片将与解释/执行的第一类文件相同。

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