解释执行
Write once, run anywhere
- 编写代码
- jdk -> javac -> 前置编译 -> class字节码
- jre/jdk -> jvm -> 解释器 Interpreter -> 解释字节码 -> 机器码 -> 解释执行
- jre/jdk -> jvm -> JIT(JUST IN TIME) -> 编译字节码 -> 机器码(缓存) -> 编译执行
Some Key Points
- JVM通过class-loader加载class字节码,加载器的类型和过程很关键
- JVM根据内置阈值,判断对该class进行解释执行/编译执行
- 混合模式,可通过参数配置,目前有c1,c2,graal等多种模式,区分在阈值、深度、分析、优化、预测等
- 编译,提升代码执行性能;解释,启动速度
- JVM在解释执行代码的过程中,会通过profiling采集并观察目标类的信息数据,并进一步判断使用哪种模式,最基本的数据包括调用次数,循环回边次数等
提前编译AOT
- Ahead-of-Time Compilation
- 工具命令jaotc 将代码直接编译为机器码
- 通过 -XX:AOTLibrary=... 加载aot机器码
本文由 Ivan Dong 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jun 13, 2023 at 10:13 am