@@ -66,7 +66,7 @@ JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编
6666
6767也就是说,JRE 是 Java 运行时环境,仅包含 Java 应用程序的运行时环境和必要的类库。而 JDK 则包含了 JRE,同时还包括了 javac、javadoc、jdb、jconsole、javap 等工具,可以用于 Java 应用程序的开发和调试。如果需要进行 Java 编程工作,比如编写和编译 Java 程序、使用 Java API 文档等,就需要安装 JDK。而对于某些需要使用 Java 特性的应用程序,如 JSP 转换为 Java Servlet、使用反射等,也需要 JDK 来编译和运行 Java 代码。因此,即使不打算进行 Java 应用程序的开发工作,也有可能需要安装 JDK。
6868
69- ![ JDK 包含 JRE ] ( https://oss.javaguide.cn/github/javaguide/java/basis/jdk-include-jre.png )
69+ ![ jdk-include-jre ] ( https://oss.javaguide.cn/github/javaguide/java/basis/jdk-include-jre.png )
7070
7171不过,从 JDK 9 开始,就不需要区分 JDK 和 JRE 的关系了,取而代之的是模块系统(JDK 被重新组织成 94 个模块)+ [ jlink] ( http://openjdk.java.net/jeps/282 ) 工具 (随 Java 9 一起发布的新命令行工具,用于生成自定义 Java 运行时映像,该映像仅包含给定应用程序所需的模块) 。并且,从 JDK 11 开始,Oracle 不再提供单独的 JRE 下载。
7272
@@ -129,7 +129,7 @@ JDK 9 引入了一种新的编译模式 **AOT(Ahead of Time Compilation)** 。
129129
130130** JIT 与 AOT 两者的关键指标对比** :
131131
132- ![ JIT vs AOT ] ( https://oss.javaguide.cn/github/javaguide/java/basis/jit-vs-aot.png )
132+ < img src = " https://oss.javaguide.cn/github/javaguide/java/basis/jit-vs-aot.png " alt = " JIT vs AOT " style = " zoom : 25 % ; " />
133133
134134可以看出,AOT 的主要优势在于启动时间、内存占用和打包体积。JIT 的主要优势在于具备更高的极限处理能力,可以降低请求的最大延迟。
135135
@@ -203,8 +203,6 @@ JDK 9 引入了一种新的编译模式 **AOT(Ahead of Time Compilation)** 。
203203
204204Java 中的注释有三种:
205205
206- ![ Java 注释类型总结] ( https://oss.javaguide.cn/github/javaguide/java/basis/java-annotation-types.png )
207-
2082061 . ** 单行注释** :通常用于解释方法内某单行代码的作用。
209207
2102082 . ** 多行注释** :通常用于解释一段代码的作用。
@@ -301,8 +299,6 @@ static final int hash(Object key) {
301299
302300Java 中有三种移位运算符:
303301
304- ![ Java 移位运算符总结] ( https://oss.javaguide.cn/github/javaguide/java/basis/shift-operator.png )
305-
306302- ` << ` :左移运算符,向左移若干位,高位丢弃,低位补零。` x << n ` ,相当于 x 乘以 2 的 n 次方(不溢出的情况下)。
307303- ` >> ` :带符号右移,向右移若干位,高位补符号位,低位丢弃。正数高位补 0,负数高位补 1。` x >> n ` ,相当于 x 除以 2 的 n 次方。
308304- ` >>> ` :无符号右移,忽略符号位,空位都以 0 补齐。
@@ -445,8 +441,6 @@ Java 中有 8 种基本数据类型,分别为:
445441
446442### 基本类型和包装类型的区别?
447443
448- ![ 基本类型 vs 包装类型] ( https://oss.javaguide.cn/github/javaguide/java/basis/primitive-type-vs-packaging-type.png )
449-
450444- ** 用途** :除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。
451445- ** 存储方式** :基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 ` static ` 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
452446- ** 占用空间** :相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。
@@ -698,8 +692,6 @@ System.out.println(l + 1 == Long.MIN_VALUE); // true
698692
699693### 成员变量与局部变量的区别?
700694
701- ![ 成员变量 vs 局部变量] ( https://oss.javaguide.cn/github/javaguide/java/basis/member-var-vs-local-var.png )
702-
703695- ** 语法形式** :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 ` public ` ,` private ` ,` static ` 等修饰符所修饰,而局部变量不能被访问控制修饰符及 ` static ` 所修饰;但是,成员变量和局部变量都能被 ` final ` 所修饰。
704696- ** 存储方式** :从变量在内存中的存储方式来看,如果成员变量是使用 ` static ` 修饰的,那么这个成员变量是属于类的,如果没有使用 ` static ` 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
705697- ** 生存时间** :从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
0 commit comments