JVM的运行时数据区

本文主要介绍了JVM的运行时数据区,其由pc寄存器、Java虚拟机栈、Java堆、方法区、运行时常量池和本地方法栈6个部分组成。pc寄存器为线程独享,Java虚拟机栈存储局部变量等,Java堆供对象分配内存,方法区存储类信息等,运行时常量池是常量池表的运行时形式,本地方法栈支持native方法执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

JVM的运行时数据区是指程序运行时会使用的数据区域,其由6个部分组成(准确来说应该是5个,方法区中包含了运行时常量区,但是JVM规范单独介绍了运行时常量区):
1. pc寄存器:每一个JVM线程分配一个独享的pc寄存器。在任何时刻,一个JVM线程只会执行一个方法,当前执行的方法称为该线程的当前方法。非native的当前方法,pc寄存器存储正在执行的字节码指令地址。native的当前方法,寄存器存储undefined。
2. Java虚拟机栈:每一个JVM线程都会有私有的Java虚拟机栈,该栈与线程同时创建,用于存储栈帧。Java虚拟机栈一般用于存储局部变量与一些尚未算好的结果。
3. Java堆:Java堆是各个JVM线程共享的运行时内存区域,也是供所有类实例数组对象分配内存的区域。Java堆在虚拟机启动的时候就被创建,其存储的对象由自动内存管理系统(即垃圾收集器)管理。
4. 方法区:方法区也是可供各个线程共享的运行时操作内存区域。其包含了运行时常量池,也存储了字段和方法数据、构造函数和普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法。
5. 运行时常量池:运行时常量池是class文件中每一个类或接口的常量池表的运行时表示形式,其包含了若干种不同的常量。每一个运行时常量池都是在方法区中分配的(即运行时常量池是方法区的一部分)。
6. 本地方法栈:用于支持native方法的执行的栈就是本地方法栈。

对比分析表

名称创建时间是否线程独享可能出现的Error
pc寄存器伴随JVM线程创建时创建
Java虚拟机栈伴随JVM线程创建时创建StackOverflowError和OutOfMemoryError
Java堆虚拟机启动的时候创建OutOfMemoryError
方法区虚拟机启动的时候创建OutOfMemoryError
运行时常量区加载类和接口到虚拟机后,就创建对应的运行时常量池OutOfMemoryError
本地方法栈线程创建的时候按线程分配StackOverflowError和OutOfMemoryError
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值