Java虚拟机堆栈

  • 作者:新网
  • 来源:新网
  • 2018-05-15 14:37:35

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

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

      4.Java堆
5fe3d114-83b1-4915-b2dc-75977c746cae.jpg
  是Java虚拟机所管理的内存中最大的一块。由所有线程共享,在虚拟机启动时创建。堆区唯一目的就是存放对象实例。
  堆中可细分为新生代和老年代,再细分可分为Eden空间、From Survivor空间、To Survivor空间。
  堆无法扩展时,抛出OutOfMemoryError异常
  5.方法区
  所有线程共享,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  当方法区无法满足内存分配需求时,抛出OutOfMemoryError
  6.运行时常量池
  它是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项是常量池(Const Pool Table),用于存放编译期生成的各种字面量和符号引用。并非预置入Class文件中常量池的内容才进入方法运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。
  当方法区无法满足内存分配需求时,抛出OutOfMemoryError
  7.直接内存
  并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
  JDK1.4加入了NIO,引入一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。因为避免了在Java堆和Native堆中来回复制数据,提高了性能。
  当各个内存区域总和大于物理内存限制,抛出OutOfMemoryError异常。

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

相关文章

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