谈谈Java中的堆与栈

综合编程 2018-05-16 阅读原文

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

本地方法栈 Native Method Stack

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

程序计数器 Program Counter Register

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

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

特点:

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

责编内容by:稀土掘金阅读原文】。感谢您的支持!

您可能感兴趣的

Debug – Invokes the Web service from the dat... Which is a good approach to invoke a webservice (SOAP) ? Is it from a Java la...
Peeking Inside Java Streams with Stream.peek For a Java developer new to JDK 8-introduced pipelines and streams , the ...
Java并发阻塞队列之ArrayBlockingQueue JUC简介 在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线...
Begin your Java exploration: Advice and resources ... I suppose most of you, in the role of explorers and adventure seekers, have c...
CrossRat远程控制软件的分析 在参加Shmoocon时候认识了很多新朋友,我们在一起探讨了一篇关于 全球范围内Caracal网络间黑暗间谍活动的报告 。 报告中大致介绍了以下方面: ...