JVM 内存模型相关理解

一、JVM 启动流程
  1. 执行 java xxx 或 javaw xxx 命令
  2. 从系统环境变量或当前路径中找到和 java 或 javaw 关联的程序并运行
  3. java 或 javaw 程序找到 jvm.cfg 配置文件并且对 jvm 进行初始化
  4. 找到 xxx 文件的 main 方法后开始运行
二、JVM 内存模型(粗略)

在这里插入图片描述

在这里插入图片描述

首先说明一下:
     堆: 被所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例
     方法区: 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
     Java 栈区: 线程私有,每调用一个方法都会产生一个栈帧,用于存储局部变量表、操作栈、动态链接、方法出口等信息

三、class 文件加载执行流程
  1. 如图 1 ,jvm 中的类加载器(ClassLoader)把 class 文件加载到内存空间的方法区中
  2. 然后开启一个线程,并且为当前线程创建 Java 栈,每个线程都拥有一个 PC 寄存器(程序计数器),该寄存器的作用和计算机的 指令指针寄存器 有点像,用于指向下一条要执行的指令
  3. 执行引擎会对 Java 栈中的代码进行执行
  4. 在执行过程中涉及到的实例的创建时会进行内存分配的操作,大部分会在堆上做分配,后来 JIT 编译器发展后,也会在栈上分配内存
  5. 从第 1 步开始其实是从 jvm 启动后执行 class 的 main 方法的步骤,如果已经有一个线程在运行,需要加载一个 class 文件,则用 ClassLoader 装载进 方法区 ,然后执行创建实例、方法调用、创建栈帧的一个循环的过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值