如何将 JVM 堆栈、堆和线程映射到物理内存或操作系统
编译器书(The dragon book)解释说,值类型是在堆栈上创建的,而引用类型是在堆上创建的。
对于 Java,JVM 还在运行时数据区域中包含堆和堆栈。对象和数组在堆上创建,方法帧被推送到堆栈。一个堆由所有线程共享,而每个线程都有自己的堆栈。下图显示了这一点:
我不明白的是,既然JVM本质上是一个软件,那么这些JVM堆,堆栈和线程如何映射到物理机?
如果有人能比较Java和C++之间的这些概念,我将不胜感激。因为Java在JVM上运行,但C++不运行。
为了使这个问题更准确,我想知道以下内容:
- 与 Java 相比,运行时数据区域C++是什么样子的?一张图片会有所帮助,我找不到像上面的JVM这样的好图片。
- 如何将 JVM 堆、堆栈、寄存器和线程映射到操作系统?或者我应该问它们如何映射到物理机?
- 每个 JVM 线程只是一个用户线程并以某种方式映射到 kernal,这是真的吗?(用户线程与内核线程)
更新:我为进程的运行时物理内存绘制图片。