美团一面:jvm如何运行一个类

36 阅读1分钟

JVM运行一个类的流程可以分为以下几个主要阶段:

  1. 类加载(Loading)​

    • JVM通过类加载器(ClassLoader)查找并读取.class文件的二进制数据到内存
    • 在内存中生成对应的java.lang.Class对象作为访问入口
    • 类加载器采用双亲委派机制:先由父加载器尝试加载,父加载器无法完成时才由子加载器加载
  2. 链接(Linking)​

    • 验证(Verification)​:检查字节码是否符合JVM规范,确保安全性
    • 准备(Preparation)​:为类变量(static变量)分配内存并设置默认初始值(如0、null等)
    • 解析(Resolution)​:将常量池中的符号引用转换为直接引用(可选阶段)
  3. 初始化(Initialization)​

    • 执行类变量的显式初始化(如static int x = 5;)和静态代码块
    • 遵循父类优先初始化原则:先初始化父类,再初始化子类
  4. 执行

    • 对于包含main方法的类,JVM会创建主线程并执行main方法
    • 方法调用时会创建栈帧,包含局部变量表、操作数栈等信息
    • 通过解释器或JIT编译器执行字节码指令
  5. 内存管理

    • 对象实例存储在堆内存中
    • 垃圾回收器自动管理不再使用的对象内存

示例执行命令:

java com.example.MyClass  # 运行指定类

注意:类加载采用懒加载机制,只有在类首次被主动使用时才会触发加载过程。主动使用的情况包括:创建实例、调用静态方法、访问非final静态字段等。