JVM内存模型【入门】

计算机结构简图

在这里插入图片描述

JVM内存模型

详细说明:https://blog.csdn.net/m0_71777195/article/details/126247090

什么是JVM?

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器、堆栈等。

为什么需要JVM?

Java文件必须先通过一个叫javac的编译器,将代码编译成class文件,然后通过JVM把class文件解释成各个平台可以识别的机器码,最终实现跨平台运行代码。

img

JVM内存模型

堆和方法区(Metaspace元数据区)是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的。

img

image.png

1、生命周期与 Thread 相同的区域,即:线程创建时,相应的区域分配内存,线程销毁时,释放相应内存。
  1. PC Register程序计数器:记录正在执行的JVM字节码指令的地址
  2. JVM Stack:每个线程一个虚拟机栈,线程内每个方法创建一个栈帧。记录局部变量、方法返回地址等
  3. 本地方法栈:OS原生的本地方法所需的内存空间
  • PC Register:程序计数器, 记录每个线程当前执行的指令信。eg:当前执行到哪一条指令,下一条该取哪条指令。每条线程都会有一个独立的程序计数器。当线程正在执行一个Java方法,程序计数器记录的是正在执行的JVM字节码指令的地址;如果正在执行的是一个Natvie(本地方法),那么这个计数器的值则为空(Underfined)。
  • JVM Stack:虚拟机栈,每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。记录每个栈帧(Frame)中的局部变量、方法返回地址等。虚拟机栈的作用:主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。栈帧的作用有存储数据,部分过程结果,处理动态链接,方法返回值和异常分派。
  • Native Method Stack:本地(原生)方法栈,顾名思义就是调用操作系统原生本地方法时,所需要的内存区域。

虚拟机栈为虚拟机执行Java 方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native 方法服务。

2、所有线程共享的(Heap、Method Area 都是在虚拟机启动时创建,虚拟机退出时释放)
  1. 堆:对象实例、数组等
  2. 方法区(元空间):类结构、类成员定义、常量、静态变量、编译后的代码缓存
  • 堆内存区:也是 GC 垃圾回收的主站场,用于存放类的实例对象及 Arrays 实例等
  • Method Area:方法区,主要存放类结构、类成员定义,static 静态成员等。方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据

其他参考图:

img
图片来自网络&课程,侵权可删。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值