Java编译到执行的过程

Java编译到执行的过程

执行过程:

编译→加载→解释→执行

运行过程

.Java→.class→装载到JVM→.class→可执行指令→调用系统硬件执行最终指令

详细过程

  • 编译过程 包括语义分析\语法分析\注解处理, 这些过程处理完之后才生成字节码.class文件, 一般对于泛型擦除\注解处理在这个阶段处理.
  • 加载过程 将.class字节码文件加载值JVM中, 加载过程包括装载\连接\初始化, 为节省内存开销, .class并不会一开始就被全加载到JVM中, 而是等到需要时候的才进行加载. .class文件通过类加载器装载到JVM, 为防止内存中出现多份同样的字节码, 使用了双亲委派机制(不会自己去尝试加载类, 把请求委托给父类加载器完成, 依次向上请求).
    • 装载 加载类的二进制数据→在JVM堆中创建java.lang.Class类对象→类信息存储在JVM方法区
    • 连接 对class信息进行验证, 为类变量分配内存空间并赋默认值 验证→准备→解析
    • 初始化 为类的静态变量赋予正确的初始值
  • 解释过程 字节码→操作系统可以识别的机器指令码
    • 字节码解释器
    • 即时编译器JIT, 把热点代码的指令码保存起来, 下次执行无需重复解释, 直接执行缓存的机器语言.
    • JVM对 热点代码做编译, 非热点代码直接进行解释, 当JVM发现某个方法或代码块运行频繁时, 会把这部分代码认定为热点代码.(热点探测或计数器, 方法调用计数器和回边计数器)
  • 执行过程 操作系统执行最终程序指令, 调用硬件执行解释器解析出的指令码

结合理解画图

posted @ 2022-09-08 13:36  IWANNPEACE  阅读(440)  评论(1编辑  收藏  举报