JVM 内存模型相关理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ocp114/article/details/82783208

一、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 装载进 方法区 ,然后执行创建实例、方法调用、创建栈帧的一个循环的过程

猜你喜欢

转载自blog.csdn.net/ocp114/article/details/82783208