谈谈Java中的堆与栈

  • 存放8种基本类型的数据和对象引用(不是对象)。
  • 每个线程有自己的单独的栈。
  • 先进后出,后进先出。
  • 因为主要存放基本类型数据变量,所以分配空间比堆快。当超出变量的作用域,将由编译器立即释放空间。

本地方法栈 Native Method Stack

程序调用本地方法的内存区域。

程序计数器 Program Counter Register

一块较小的内存空间,可看作是当前线程所执行的字节码的 行号指示器。

通过改变计数器的值来选取下一条需要执行的字节码指令。(分支、循环、跳转、异常处理、线程恢复等)基础功能都依赖与其完成。

特点:

  • 线程私有:因为 Java 虚拟机的多线程是通过 线程轮流切换 并 分配处理器执行时间 来实现的,在某一时刻,只会执行一条线程。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器。
  • 无内存溢出:如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在 执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在 Java 虚拟机程序规范中没有规定任何 OutOfMemoryError 情况的区域。
稀土掘金责编内容来自:稀土掘金 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » 谈谈Java中的堆与栈

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录