JVM内存结构图:
运行时区域主要包含:方法区、堆区、虚拟机栈、本地方法栈、程序计数器
所有线程共享的区域有:方法区和堆区
线程之间隔离的区域有:虚拟机栈、本地方法栈和程序计数器
各个区域的用途是:
1、方法区:存储虚拟机加载的类信息、常量、静态变量及JIT编译后的代码等信息;
2、堆区:存放对象实例,几乎多有的对象实例都在这里分配,垃圾收集主要针对的也是这个区域;
3、虚拟机栈:这个区域线程私有,生命周期和线程相同,每个方法的执行都会创建一个栈帧,用于存储:局部变量表、操作数栈、动态链接、方法出入口等信息;
4、本地方法栈:涉及调用本地方法的情况,JNI Native调用;
5、程序计数器:线程私有,用于记录字节码执行的位置;