一、Java堆(Java Heap):
1.Java堆是被所有线程所共享的一块区域,在虚拟机启动时创建,也是Java虚拟机所管理的内存中最大的一块;
2.Java堆中存放对象实例(比例关键字new的对象)以及数组;
3.由于现在内存回收基本采用“分代收集算法”,所以Java堆可细分为新生代和老生代。(关于新生代、老年代及永久代的概念问题后续详解。)
二、虚拟机栈(Java Virtual Machine Stacks):
1.每个线程有个栈区,栈和栈之间不做数据共享。栈是线程私有的空间;
2.每个方法在执行的同时,都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息;
3.局部变量表:
① 编译期间可知的基本数据类型(boolean、byte、char、short、int、float、long、double);
② 对象引用(reference类型);
③ returnAddress类型(指向了一条字节码指令的地址)
三、本地方法栈(Native Method Stack):
1.本地方法栈与虚拟机栈发挥的作用非常相似,区别在于虚拟机栈是虚拟机执行Java方法服务,本地方法栈是虚拟机使用到的Native方法服务。
四:方法区(Method Area):
1.方法区与Java堆一样,是各个线程的共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器后的代码等数据;