java运行时数据区

运行时数据区包括以下几个部分:程序计数器,堆,java栈,本地方法栈,方法区

1.程序计数器:当CPU需要执行指令时,需要从程序计数器中获取当前需要执行的指令所在存储单元的地址。用来指示执行哪条指令。

其大小不会随程序的执行而发生改变。

2.Java栈:java方法执行的内存模型。存放的时一个个栈帧,每个栈帧对应一个被调用的方法。

  栈帧中包括:局部变量表、操作数栈、指向当前方法所属的类的运行时常量池的引用、方法返回地址、附加信息。

  局部变量表:存储方法中的局部变量(包括在方法中声明的非静态变量以及函数形参)。在程序执行期间局部变量表的大小是不会改变的

3.本地方法栈:在JVM规范中没强制规定。Java栈是为执行Java方法服务,本地方法栈则是为执行本地方法(Native Method)服务

4.堆:用来存储对象本身以及数组(数组的引用存在java栈中)。堆被所有线程共享

5.方法区:存储了每个类的信息(类的名称、方法信息和字段信息)、静态变量、常量以及编译器编译后的代码。在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中,比如String的intern方法。

点赞
收藏

评论区

加载中...

相关推荐

java之jvm

1.JVM内存模型_线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区_回答以上问题是需回答两个要点:1\.各部分功能2\.是否是线程共享2.JMM与内存可见性JMM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要

Jvm的内存布局和垃圾回收机制

内存布局运行时数据区1.程序计数器:用来控制代码运行行数。2.Java虚拟机栈:每个线程运行方法(A调用B)时,先把A方法放入到栈底,然后加载B方法,B

C进阶 - 内存四驱模型

一.内存四驱模型不知我们是否有读过《深入理解java虚拟机》这本书,强烈推荐读一下。在java中我们将运行时数据,分为五个区域分别是:程序计数器,java虚拟机栈,本地方法栈,java堆,方法区。在c/c中我们将运行时数据,分为四个区域分别是:栈区,堆区,数据区,代码区。我们详细来介绍下:1.栈区:由编译器自动分配释放,存放函数的

JVM内存模型和类加载机制

JVM内存模型Java代码是运行在Java虚拟机(JVM)上的,Java虚拟机通过解释执行(解释器)或编译执行(编译器)来完成。Java内存模型分为5个部分:方法区(MethodArea),Java堆(Heap),Java栈(VMStack),本地方法栈(NativeMethodStack),程序计数器(PC寄存器)!(ht

JVM内存区域划分

JVM内存区域划分一、JVM运行时数据区划分根据《Java虚拟机规范》JVM会把它管理的内存划分为若干个不同的数据区域,如下图所示:方法区、堆、栈(虚拟机栈、本地方法栈)、程序计数器。线程私有的意思是指,JVM每遇到一个新的线程就会为他们分配栈和程序计数器。!(https

JVM中的Stack和Frame

JVM执行Java程序时需要装载各种数据,比如类型信息(Class)、类型实例(Instance)、常量数据(Constant)、本地变量等。不同的数据存放在不同的内存区中,这些数据内存区称作“运行时数据区(RuntimeDataArea)”。运行时数据区有这样几个重要区:JVMStack(简称Stack或者虚拟机栈、线程栈、栈等),Frame(又称S

java运行时数据区 - HelloWorld