JVM概述

52 阅读2分钟

JVM模型

Snipaste_2024-10-19_17-00-12.png

  • 方法区:存储类信息、静态成员
  • 堆:对象、常量池
  • 栈:非静态成员
  • 程序计数器

JVM类加载

定义:Java虚拟机把描述类的数据从编译好的 .class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的内部表示形式,这个过程被称作虚拟机的类加载机制。

  1. 加载:通过全限定类名找到 .class 文件,通过字节流读入内存

  2. 连接

    1)验证:

    2)准备: 为静态成员变量分配内存和初始化默认值

    3)解析:

  3. 初始化:对静态成员变量进行显示赋值、执行静态代码块、执行类加载器

  4. 卸载:

类加载器

  • BootStrap ClassLoader (启动类加载器)

    • 执行优先级最高的类加载器
    • 用于加载JRE核心类库的.jar文件,如rt.jar
    • 使用C语言实现,双亲委派顶级祖宗加载器
  • Extensions ClassLoader 也称 (Ext ClassLoader) (扩展类加载器)

    • 用于加载JRE扩展目录下的.jar文件
    • 使用Java实现
  • Application ClassLoader (应用程序类加载器)

    • 用于加载用户自己编写的类文件,和项目中引用其他.jar包中的类文件
  • Custom ClassLoader (自定义加载器)

    • 用于加载指定目录下的类,通常用于自定义实现

双亲委派机制

双亲委派模型其表达的意思是,类加载器与父亲加载器嵌套,当需要加载类的时候回去现寻找父亲加载器,如果有父亲加载器的话就优先使用父亲加载器,如果父亲加载器无法完成加载的话,再使用自己进行加载。