将Java程序映射到操作系统进程

将Java程序映射到操作系统进程,java,compiler-construction,process,operating-system,callstack,Java,Compiler Construction,Process,Operating System,Callstack,我想知道这是如何发生的:Java程序是如何映射到操作系统进程的(如下面针对Linux所示): 在C语言中,程序的编写方式与整个调用堆栈在操作系统中的运行方式有着直接的联系。我想知道Java是如何实现映射的?对对象obj调用的meth()方法是否转换为查找obj的地址。meth()从那时起,堆栈的使用方式与C中的相同 提前谢谢 编辑:我也想知道其他OOP语言(C++、Python等)通常使用的模型。这是一个相当复杂的问题。关于这个话题,这里有一个很好的例子。简而言之,Java有两种执行模式,它们

我想知道这是如何发生的:Java程序是如何映射到操作系统进程的(如下面针对Linux所示):

在C语言中,程序的编写方式与整个调用堆栈在操作系统中的运行方式有着直接的联系。我想知道Java是如何实现映射的?对对象obj调用的meth()方法是否转换为查找obj的地址。meth()从那时起,堆栈的使用方式与C中的相同

提前谢谢


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

这是一个相当复杂的问题。关于这个话题,这里有一个很好的例子。简而言之,Java有两种执行模式,它们极大地影响内存布局

  • 有些代码是由intepreter执行的
  • 有些代码被编译为本机代码以获得更好的性能
  • 请参阅此wiki页面:

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

    其他线程对此进行了详细讨论:


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


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

    好吧,我不会说它在其他两个线程中“讨论得很好”。但是JVM的内存布局是极其复杂的,正如你所说,这意味着a)没有多少人能够认真回答这个问题(我不知道,我知道内存空间的存在以及它们的基本功能,但是布局或其他细节?咬我一口)和b)即使有人想这样做,这将是一篇相当笨拙的文章。不确定它是否适合这样做。请注意,即使对于C,给定的图片也已经是一个严重的简化。例如,不一定只有一个堆(如果有很多线程想要分配内存,那么拥有一个堆是一个非常糟糕的主意),然后还有线程特定的数据等等。魔鬼在细节中,如果你想一想简单的C运行时有多复杂,想象一下JVM是什么样子:)当然,我只想讨论一个单线程进程的简单例子:)