JVM内存段和JIT编译器

JVM内存段和JIT编译器,jvm,jit,Jvm,Jit,我知道这是依赖于JVM的,每个虚拟机都会选择实现它,但我想了解总体概念 据说,对于JVM用来执行Java程序的内存段 Java堆栈 堆 方法区 PC寄存器 本机方法堆栈 它们不一定是用连续内存实现的,并且可能都实际分配在操作系统提供的一些堆内存上,这就引出了我的问题 JVM完全使用JIT机制并编译字节码方法 将这些方法存储到本机machinecode方法中 是吗?执行引擎(通常用C编写)/ C++必须调用这些JIT编译函数,但是内核不应该允许程序执行堆栈/堆/静态内存段上保存的代码,JVM如何

我知道这是依赖于JVM的,每个虚拟机都会选择实现它,但我想了解总体概念

据说,对于JVM用来执行Java程序的内存段

  • Java堆栈
  • 方法区
  • PC寄存器
  • 本机方法堆栈
  • 它们不一定是用连续内存实现的,并且可能都实际分配在操作系统提供的一些堆内存上,这就引出了我的问题

    • JVM完全使用JIT机制并编译字节码方法 将这些方法存储到本机machinecode方法中 是吗?执行引擎(通常用C编写)/ C++必须调用这些JIT编译函数,但是内核不应该允许程序执行堆栈/堆/静态内存段上保存的代码,JVM如何克服这个问题?
    • 我的另一个问题是关于Java堆栈,当一个方法(JIT编译后)在处理器中执行时,它的局部变量应该保存在Java堆栈中,同样地,Java堆栈可以使用非连续内存实现,甚至可能只是在堆上分配一些堆栈数据结构作为堆栈,如何以及在何处保存正在执行的方法的局部变量?内核不应该允许程序将堆分配的内存视为进程堆栈,JVM如何克服这个困难
    再次强调,我要求的是一个整体概念,我知道每个JVM都会选择实现稍微不同的概念

    完全使用JIT机制并将字节码方法编译成本机机器码方法的JVM将这些方法存储在某个地方,那会在哪里


    它存储在Java中的“Perm Gen”中每个线程的堆栈就是我所指的Java堆栈,这意味着它存储在本机内存中,为什么?它应该存储在堆栈/堆中,它最终如何执行它。还有很多时候,jvm会使用堆内存实现它自己的每个线程的堆栈内存,这再次让我想到了我最初的问题,它如何将堆栈结构视为本机堆栈。。。。。这并不能完全回答我的问题。。。您能详细介绍一下本机内存段吗?谢谢你