Java虚拟机的内存分为三个区域:栈stack、堆heap、方法区method are
一、栈的特点:
1、栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出入口等);
2、JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等);
3、栈属于线程私有,不能实现线程间的共享;
4、栈的存储特性是“先进后出,后进先出”;
5、栈是由系统自动分配的,速度快;
6、栈是一个连续的内存空间。
线程:启动一个程序时,该程序会包含启动多个线程,为每个线程创建一个栈
二、堆的特点:
1、堆(heap)用于存储创建好的对象和数组(数组也是对象);
2、JVM只有一个堆,被所有线程共享;
3、堆是一个不连续的内存空间、分配灵活、速度慢.。
三、方法区的特点:
1、JVM只有一个方法区,被所有线程共享;
2、方法区实际也是堆,只用于存储类、常量相关的信息;
3、用来存放程序中永远不变或唯一的内容(类信息【class对象】、静态变量、字符串常量等)。
四、图示:
1、执行类、先将代码加载到方法区上,并将该类的相关信息(代码、静态变量、静态方法、字符串常量等)存储在方法区中:
2、再查找类里面的main方法并执行main方法,在栈中创建一个栈帧,创建一个方法stu=null;
3、在执行Student st = new Student()语句后,在堆中新建出一个对象,里面有属性有方法;
4、执行“ = ”赋值符号,堆中的每个内存块都有一个地址,将st对象的地址赋值给栈帧中的st方法。