Java虚拟机堆栈

  • 作者:新网
  • 来源:新网
  • 2018-05-15 14:33:53

栈(stack),位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。存储读取速度,仅次于寄存器。存放基本类型数据变量和对象、数组等引用类型的...

   栈(stack),位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。存储读取速度,仅次于寄存器。存放基本类型数据变量和对象、数组等引用类型的引用!

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

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,可以点击上方修改按钮,也欢迎发送邮件至:guhaisong@xinnet.com进行举报,并提供相关证据,工作人员会在5个工作日内联系您,一经查实,本站将立刻删除涉嫌侵权内容。

增值电信业务经营许可证:B1-20140435 京B2-20070152 域名注册服务批文号:信部电函[2005]263号 京ICP证000012
 京公网安备11030102000056号 京ICP备09061941号-4
Copyright©1993-2018 北京新网数码信息技术有限公司 版权所有