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