JVM内存结构,如下图所示:
1.JAVA虚拟机栈
Java虚拟机栈,占用操作系统内存,当有新线程被创建时JVM为其创建一个JAVA虚拟机栈,生命周期和线程一样,每个方法被执行时压入一个栈帧,栈帧存储了被调用方法的信息如局部变量表、动态链接、操作数、方法出口等信息,当方法返回之后,栈帧被丢弃。
2.程序计数器PC
是一个很小的内存区域,不在RAM上而是在CPU上,用于记录程序执行进度。
3.堆
JVM启动的时候会创建一个堆区供所有线程放对象和数组。
4.方法区
方法区存放了加载的类的描述信息,它是线程安全的,是可以动态调整大小的,还可以发生GC。方法区内有一个运行时常量池,用于存储编译器生成的常量和引用。在hotspot虚拟机中,这块区域对应持久代。
5.本地方法栈
用于存放native方法的信息。native方法指非JAVA方法。
线程共享的:堆和方法区;
线程私有的:虚拟机栈、本地方法栈、程序计数器这一小部分内存。