【发布时间】:2016-05-24 14:14:21
【问题描述】:
我知道这是依赖于 JVM 的,每个虚拟机都会选择实现它有点不同,但我想了解整体概念。
据说对于JVM用来执行Java程序的内存段
- Java 堆栈
- 堆
- 方法区
- PC 寄存器
- 本机方法堆栈
不一定使用连续内存实现,并且可能全部实际分配在操作系统提供的一些堆内存上,这引出了我的问题。
- 完全使用JIT机制并编译字节码方法的JVM 到本地机器码方法中,将这些方法存储在某个地方,其中 那会是什么?执行引擎(通常用 C / C++ ) 必须调用这些 JIT 编译的函数,但内核不应该允许程序执行保存在堆栈/堆/静态内存段上的代码,JVM 如何克服这个问题?
- 我的另一个问题是关于 Java 堆栈,当一个方法(在 JIT 编译之后)在处理器中执行时,它的局部变量应该保存在 Java 堆栈中,但 Java 堆栈也可以用不连续的方式实现内存,甚至可能只是在堆上分配的一些堆栈数据结构作为堆栈,正在执行的方法的局部变量如何以及在哪里保存?内核不应该允许程序将堆分配的内存视为进程堆栈,JVM 是如何克服这个困难的呢?
再次强调,我要求的是一个整体概念,我知道每个 JVM 会选择实现这个有点不同...
【问题讨论】: