From ae31c081bf53e94fe1488ed5b8087fc66ba1eff2 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 11 Jul 2022 23:37:49 +0800 Subject: [PATCH] Update java-basic-questions-01.md --- docs/java/basis/java-basic-questions-01.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/java/basis/java-basic-questions-01.md b/docs/java/basis/java-basic-questions-01.md index e80bae70..3f5cfd03 100644 --- a/docs/java/basis/java-basic-questions-01.md +++ b/docs/java/basis/java-basic-questions-01.md @@ -58,7 +58,9 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有 ### 为什么不全部使用AOT呢? -爱思考的铁子们一定在想,AOT可以提前编译节省启动时间那为什么不全部使用这种编译方式呢?长话短说,这就和java语言的动态特性有千丝万缕的联系了。举个例子,比如CGLib动态代理使用的是ASM技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是.class文件,如果全部使用AOT提前编译,也就不能使用ASM技术了。为了支持类似的动态特性,所以选择使用JIT即时编译器。 +AOT 可以提前编译节省启动时间,那为什么不全部使用这种编译方式呢? + +长话短说,这和 Java 语言的动态特性有千丝万缕的联系了。举个例子,CGLIB 动态代理使用的是 ASM 技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是 `.class` 文件,如果全部使用 AOT 提前编译,也就不能使用 ASM 技术了。为了支持类似的动态特性,所以选择使用 JIT 即时编译器。 ### 为什么说 Java 语言“编译与解释并存”?