JVM的Run-Time数据区域

来源:互联网 发布:商标logo设计软件 编辑:程序博客网 时间:2024/05/02 00:23

    这是我阅读JVM说明书的笔记。我画了一张图来帮助我更好地理解。


1. 每个独立线程(非共享)的数据区域

    每个独立线程的数据区域包括程序计数寄存器(program counter register)、JVM栈(JVM Stack)和Native方法栈(Native Method Stack)。当创建一个新的线程时,这些数据区也同时被创建。

    程序计数寄存器:用于控制线程的每一次执行

    JVM栈:用于存放帧(frame),如下图所示

    Native方法栈:用于支持native方法,即非Java语言的方法

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

    所有线程共享堆(Heap)和方法区(Method Area)。

    堆:这是我们经常遇到的数据区。它存放着数组和对象的,当JVM启动时就会创建堆。垃圾回收器就在该区域工作。

    方法区:存放run-time的常量池(constant pool)、字段和方法的数据,以及方法和构造函数的代码。

    运行时常量池:它是类或接口文件中常量池表在运行时的表示。它包含多种类型的常量,包括编译时方法类能确定的数值常量,以及运行时才能确定的引用字段。


    栈存放帧,每调用一个方法时,就有一个帧入栈。每个帧包含一个本地变量数组、操作数栈(Operand Stack)、常量池的引用。

    如需更多信息,请前往JVM说明网站。

参考文章:

1. JVM说明 - Run-Time数据区域

2. Java字节码基础


相关文章:

1. JVM运行时是什么样子?

2. Java数组在内存中是什么样子?

3. Java中的null到底是什么?

4. 我们能从Java的Hello World中学到什么?


原文地址:JVM run-time data areas

0 0
原创粉丝点击