美文网首页
堆内存和栈内存

堆内存和栈内存

作者: zxcvbnmzsedr | 来源:发表于2018-06-28 22:21 被阅读0次

我们常常做的是将Java内存区域简单的划分为两种: 一种叫做栈内存,一种叫做堆内存。

栈内存

栈内存又分两种,一种是虚拟机栈,一种是本地方法栈。

本地方法栈是去调用native方法服务,和java关系不算太大。

虚拟机栈就牛逼了,它里面存了局部变量表,操作栈,动态链接,方法出口等信息。

局部变量表存放了编译期可知的各种基本数据类型,对象引用和一条字节码指令的地址。
其中64位长度的long和double类型的数据会占用2个局部变量空间,其余的基本类型占1个。

当进入一个方法时,这个方法需要分配多大的局部变量空间是完全确定的,在运行期间不会改变变量表的大小。

在java虚拟机规范中,这个区域会有两种异常情况产生,如果线程请求的栈深度大于虚拟机所允许的深度,将会抛出StackOverflowError异常。如果没有处理好递归调用的出口条件,很容易就会报这样的错。

如果虚拟机栈动态扩展的时候无法申请最够的内存,就会抛出OutOfMemoryError异常。

堆内存

Java的堆是Java虚拟机所管理的内存中最大的一块。

堆的唯一目的就是存放对象实例。所有的对象实例都会在这里分配内存。

堆产生了一个对象之后,还能够在栈里面定义一个变量指向堆的的首地址。
如果这个对象没有被引用,那么不一会就会被java当作垃圾回收,因此Java堆是垃圾收集的管理主要区域。

如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。

参考资料

深入理解java虚拟机

相关文章

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • JS 垃圾回收

    内存 JS 数据的存储地址分为栈内存和堆内存。 栈内存 堆内存 在 JS 存放数据的内存中又分为高位和低位,其中高...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • Java 工程师成神之路(2018 年修订版)

    基础篇 1.1 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别。 Java内存模型 内存可见性、重排...

  • Java程序员需要掌握的技能

    一、基础篇 1.JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性...

  • python中内存管理机制

    内存管理机制 1.堆和栈 内存区域中分为堆区间和栈区间栈区间的内存的开辟和释放是自动的堆区间的内存是手动的开辟和释...

  • java基础、进阶、高级到架构的各种知识分类!

    一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺...

网友评论

      本文标题:堆内存和栈内存

      本文链接:https://www.haomeiwen.com/subject/buanyftx.html