JVM 运行时的数据区域

原文地址:http://www.programcreek.com/2013/04/jvm-run-time-data-areas/

以下是我阅读 JVM 相关资料时整理的笔记:

1. 每个线程的数据区(不共享)

每个线程的数据区域包括程序计数寄存器,JVM 堆栈和本地方法堆栈。 它们都是在创建新线程时创建的。

程序计数寄存器用于控制每个线程的每一次执行。 JVM 堆栈包含下图所示的框架。 本地方法堆栈用于支持本地方法,即非 Java 语言的方法。

2. 所有线程共享的数据区域

所有线程共享 Heap 和 Method 区域。

Heap 是我们最经常处理的区域。 它用于存储 JVM 启动时创建的数组和对象。 垃圾收集也是在这一块工作。

Method 区域存储运行时的常量池,字段和方法数据,以及方法和构造函数代码。

运行时常量池(Runtime Constant Pool)是每个类或每个接口在运行时其中的 constant_pool 表的表示形式。 它包含几种常量,从编译时已知的数字到方法和字段引用,必须在运行时解析。

Stack 包含 Frames,当调用方法时,frame 被推送到堆栈。 一个 frame 包含局部变量数组,操作数堆栈,并且引用到常量池。

有关更多信息,请访问官方 JVM 站点。

参考阅读:

  1. JVM Specification - Run-Time Data Areas
  2. Java Bytecode Fundamentals

results matching ""

    No results matching ""