栈(stack),位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。存储读取速度,仅次于寄存器。存放基本类型数据变量和对象、数组等引用类型的引用!
栈(stack),位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。存储读取速度,仅次于寄存器。存放基本类型数据变量和对象、数组等引用类型的引用!
< div> 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在 虚拟机栈里面从入栈到出栈(也叫弹栈)的过程。 对于栈,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。 堆(heap),是一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象! 各存储 空间就速度来说,有如下关系:寄存器 >堆栈 > 堆 > 其它。 栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器gc负责回收。 结合实例:Student student=new Student();JVM在内存中偷偷的做了什么? 加载Student.class文件进入内存 在栈内存中为student开辟空间,栈内存中的局部变量表中存放student变量 在堆内存中为学生对象开辟空间 学生对象的成员变量默认初始化(无参构造方法) 学生对象的成员变量显示初始化(有参构造方法)(若没有就不执行) 通过构造代码块对学生对象进行初始化(若没有就不执行) 通过构造方法对学生对象进行初始化(通过构造方法对学生对象的成员变量赋值) 对象初始化完毕 学生对象初始化完毕后,向外抛出产生的对象地址 让变量student指向学生对象。