当前位置:首页 > 内存 > 正文

java内存模型和jvm内存

  • 内存
  • 2024-05-05 15:00:49
  • 8393

一、JVM中一个线程的Java栈和寄存器中分别放的是什么?

jvm内存模型:Java代码运行在Java虚拟机上,由Java虚拟机通过解释执行(解释器)或者编译执行(即时编译器)来完成。指的是虚拟机的Java运行时内存模型。
运行时内存模型分为两种类型:线程私有和共享数据区域。线程的私有数据区包括程序计数器、虚拟机栈、本地方法区以及共享的数据区。所有线程包括Java堆、方法区,在方法区都有一个常量池。java运行时的内存模型图如下:

从图中可以看出内存分为私有和线程共享两种:

(1)线程私有区域,包括以下三种:

程序计数器,记录正在执行的机器字节码虚拟机的地址;

>

虚拟机栈:执行方法的内存区域。每个方法执行时,都会在虚拟机栈中创建一个栈帧;

本地方法栈:执行虚拟机原生方法的内存区域;

本地方法栈:执行虚拟机原生方法的内存区域;


(2)线程共享区域,包括以下两种

Java堆:对象分配内存的区域

方法区:存储类信息、常量、静态变量、编译器编译的代码等数据;

常量组:存储参数,指由编译器对象创建的各种常量和符号,属于方法区的一部分。


发帖者提到的Java堆栈通常指的是图中的虚拟机堆栈。在代码中调用方法时,经常需要从一种方法切换到另一种方法。,执行完后返回,这里需要将当前方法的基本信息压入栈并保存,然后再跳转。
3.注册问题
对于Java中最常用的虚拟机来说,Sun提供的热点虚拟机是基于堆栈的虚拟机;Android设备设备使用Google提供的Dalvik和ART虚拟机。Android5.0以后默认使用ART虚拟机,它是一种基于订阅的虚拟机。发帖者问的是jvm(javavm),一种基于堆栈的虚拟机。那么,关于虚拟机栈,我们就更详细的分析这块内存的内容,如下图:

可以看到,有一个虚拟机栈中的帧由栈帧组成,栈帧中包含局部变量表、操作栈等子项。当线程运行并且代码运行时,会通过程序计数器不断执行下一条指令。。在实际的命令操作和其他操作过程中,操作栈的操作数会进栈和出栈,操作数会在局部变量表和操作栈之间传递。