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