JVM运行时数据区.pdfVIP

  • 0
  • 0
  • 约1.16万字
  • 约 6页
  • 2019-12-01 发布于河北
  • 举报
JVM 运行时数据区 目录 JVM 运行时数据区1 2.5.1 程序计数器(The pc Register )2 2.5.2 栈(Java Virtual Machine Stacks )2 2.5.3 堆(Heap )2 2.5.4 方法区(Method Area )3 2.5.4 运行时常量池 (Runtime Constant Pool )3 2.5.5 本地方法栈 (Native Method Stacks )3 2.5.1 The pc Register 3 2.5.2 Java Virtual Machine Stacks 4 2.5.3 Heap 4 2.5.4 Method Area 5 2.5.5 Runtime Constant Pool 5 2.5.6 Native Method Stacks 5 本文是 《The Java Virtual Machine Specification (Java SE 7 Edition )》运行时区的翻译, 原文参见:/javase/7/specs/jvms/JVMS-JavaSE7.pdf JVM 定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM 启动 的时候创建,在 JVM 退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候 创建,在线程退出的时候销毁。 方法区 Eden区 年轻代 堆 Survivor区 年老代 JVM 的运行 本地方法栈 时区域 程序计数器 局部变量区 栈 多个栈针 操作数栈 2.5.1 程序计数器(The pc Register ) JVM 一次能支持很多线程执行。每一个JVM 线程有它自己的程序计数器。在任何时候, 一个 JVM 的线程都正在执行当前线程的方法代码。如果这个方法不是本地方法,程序计数 器包含当前被执行的 JVM 地址。如果线程正在执行本地方法,程序计数器的值为未定义。 JVM 程序计数器足以存储一个返回地址或一个本地指针。 2.5.2 栈 (Java Virtual Machine Stacks ) 每个JVM 的线程在创建的时候,都会创建一个栈。一个栈包含很多栈桢。JVM 的栈好 比传统语言C 的栈,它维持(存储)本地变量和部分结果,并在方法调用和返回中(被)使用。 由于JVM 栈除了压入和弹出栈帧之外不能被直接操作,栈帧可以在堆上分配空间。 JVM 说 明书(规范)允许栈要么是一个固定大小,要么动态扩展来满足计算的要求。如果JVM 栈是一 个固定的大小,当栈被创建的时候每一个栈大小可以自由设置。 在动态扩展情况下,可以 控制最大最小内存。 在VM Spec 中对这个区域规定了2 种异常状况(以下两种异常与JVM 的栈机制有关):  如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常。  如果 VM 栈可以动态扩展,当扩展时无法申请到足够内存(或者在初始化新线程时没有 足够内存在创建栈)则抛出OutOfMemoryError 异常。 2.5.3 堆(Heap ) JVM 有一个在所有线程内共享的堆。堆是给所有类的实例和数组分配内存的运行时数据 区。 堆在虚拟机启动的时候创建,堆中储存的

文档评论(0)

1亿VIP精品文档

相关文档