转载

谈谈Java中的堆与栈

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

本地方法栈 Native Method Stack

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

程序计数器 Program Counter Register

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

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

特点:

  • 线程私有:因为 Java 虚拟机的多线程是通过 线程轮流切换 并 分配处理器执行时间 来实现的,在某一时刻,只会执行一条线程。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器。
  • 无内存溢出:如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在 执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在 Java 虚拟机程序规范中没有规定任何 OutOfMemoryError 情况的区域。
原文  https://juejin.im/post/5afbdef0518825426539a237
正文到此结束
Loading...