简单记录JVM的各个区域:
JVM的内存模型一共可以分成五个部分:堆、方法区、程序计数器、虚拟机栈和本地方法栈。其中在同一个类里面的多个线程所共享的区域是堆和方法区。线程所私有的部分是程序计数器、虚拟机栈和本地方法栈。 堆:此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap)。 方法区:它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据.。常量池也是方法区的一部分。 程序计数器:用于记录当前线程所执行的指令位置。在线程切换回来之后,能够根据所记录的位置继续往下执行程序。 虚拟机栈:描述的是 Java 方法执行的内存模型。Java虚拟机栈是由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息。局部变量表主要存放了编译器可知的各种数据类型、对象引用。 本地方法栈:虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。