JVM是否在自己的堆和堆栈中为Java代码的引用变量和基本变量分配内存?

JVM是否在自己的堆和堆栈中为Java代码的引用变量和基本变量分配内存?,java,memory-management,jvm,Java,Memory Management,Jvm,我在Ubuntu上编写了一个具有无限循环的Java程序。文件名为array.java。请忽略要遵循的编码标准 import java.util.*; class array { public static void main(String[] args) { while(true); } } 我将其编译并运行为: hduser@pc4:~/codes/java$ javac array.java hduser

我在Ubuntu上编写了一个具有无限循环的Java程序。文件名为array.java。请忽略要遵循的编码标准

import java.util.*;
class array  
{
        public static void main(String[] args)
        {
                while(true);
        }
}
我将其编译并运行为:

hduser@pc4:~/codes/java$ javac array.java 
hduser@pc4:~/codes/java$ java array
程序陷入了循环。然后我列出了在系统上运行的进程,有一个进程名为java,PID为5439。我看到了PID 5439的映射文件,该文件如下所示:

00400000-00401000 r-xp 00000000 08:01 9581391                            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
00600000-00601000 r--p 00000000 08:01 9581391                            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
00601000-00602000 rw-p 00001000 08:01 9581391                            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
00bbc000-00bdd000 rw-p 00000000 00:00 0                                  [heap]
bfe00000-c1300000 rw-p 00000000 00:00 0
......
......
7f2d70ac2000-7f2d70ac3000 rw-p 00000000 00:00 0
7ffd7f474000-7ffd7f495000 rw-p 00000000 00:00 0                          [stack]
7ffd7f540000-7ffd7f542000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

在C或C++中,我们有一个进程,它可以由编译器为我们自己编写的代码本身创建一个进程,并且该进程有自己的文本、数据、堆、栈等部分。相应的变量被容纳在同一流程的不同部分

但是在Java的情况下,这些部分运行的是一个不同的进程。这些部分根本不属于我们编写的代码,甚至我们编写的代码也不创建任何单独的过程

我的问题是:
我的代码中的变量是否包含在JVM本身的各个部分(文本、堆、堆栈等)中?

这取决于您所说的“JVM”是什么意思

它可以表示运行Java类文件的程序。在这种情况下,答案是“不”。那个程序有自己的堆栈。从它的观点来看,已执行程序的部分是其数据空间中的数据结构


另一方面,它可能意味着程序实现的虚拟机。虚拟机为Java程序的每个线程都有一个堆栈。

它们还会去哪里?