File tree 1 file changed +5
-5
lines changed
1 file changed +5
-5
lines changed Original file line number Diff line number Diff line change @@ -95,7 +95,7 @@ JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,
95
95
96
96
#### 2.1.3 初始化
97
97
98
- 初始化其实就是执行类构造器方法的` <clinit>() ` 的过程,而且要保证执行前父类的` <clinit>() ` 方法执行完毕。这个方法由编译器收集,顺序执行所有类变量(static修饰的成员变量)显式初始化和静态代码块中语句。此时准备阶段时的那个 ` static int a ` 由默认初始化的0变成了显式初始化的3. 由于执行顺序缘故,初始化阶段类变量如果在静态代码块中又进行了更改,会覆盖类变量的显式初始化,最终值会为静态代码块中的赋值。
98
+ 初始化其实就是执行类构造器方法的` <clinit>() ` 的过程,而且要保证执行前父类的` <clinit>() ` 方法执行完毕。这个方法由编译器收集,顺序执行所有类变量(static修饰的成员变量)显式初始化和静态代码块中语句。此时准备阶段时的那个 ` static int a ` 由默认初始化的0变成了显式初始化的3。 由于执行顺序缘故,初始化阶段类变量如果在静态代码块中又进行了更改,会覆盖类变量的显式初始化,最终值会为静态代码块中的赋值。
99
99
> 注意:字节码文件中初始化方法有两种,非静态资源初始化的` <init> ` 和静态资源初始化的` <clinit> ` ,类构造器方法` <clinit>() ` 不同于类的构造器,这些方法都是字节码文件中只能给JVM识别的特殊方法。
100
100
101
101
#### 2.1.4 卸载
@@ -113,11 +113,11 @@ GC将无用对象从内存中卸载
113
113
114
114
### 2.3 双亲委派机制
115
115
116
- 当一个类收到了加载请求时,它是不会先自己去尝试加载的,而是委派给父类去完成,比如我现在要new一个Person,这个Person是我们自定义的类 ,如果我们要加载它,就会先委派App ClassLoader,只有当父类加载器都反馈自己无法完成这个请求(也就是父类加载器都没有找到加载所需的Class )时,子类加载器才会自行尝试加载。
116
+ 当一个类收到了加载请求时,它是不会先自己去尝试加载的,而是委派给父类去完成,比如我现在要 new 一个 Person,这个 Person 是我们自定义的类 ,如果我们要加载它,就会先委派 App ClassLoader ,只有当父类加载器都反馈自己无法完成这个请求(也就是父类加载器都没有找到加载所需的 Class )时,子类加载器才会自行尝试加载。
117
117
118
- 这样做的好处是,加载位于rt.jar包中的类时不管是哪个加载器加载,最终都会委托到BootStrap ClassLoader进行加载 ,这样保证了使用不同的类加载器得到的都是同一个结果。
118
+ 这样做的好处是,加载位于 rt.jar 包中的类时不管是哪个加载器加载,最终都会委托到 BootStrap ClassLoader 进行加载 ,这样保证了使用不同的类加载器得到的都是同一个结果。
119
119
120
- 其实这个也是一个隔离的作用,避免了我们的代码影响了JDK的代码 ,比如我现在自己定义一个 ` java.lang.String ` :
120
+ 其实这个也是一个隔离的作用,避免了我们的代码影响了 JDK 的代码 ,比如我现在自己定义一个 ` java.lang.String ` :
121
121
122
122
``` java
123
123
package java.lang ;
@@ -128,7 +128,7 @@ public class String {
128
128
}
129
129
```
130
130
131
- 尝试运行当前类的 ` main ` 函数的时候,我们的代码肯定会报错。这是因为在加载的时候其实是找到了 rt.jar 中的` java.lang.String ` ,然而发现这个里面并没有 main 方法。
131
+ 尝试运行当前类的 ` main ` 函数的时候,我们的代码肯定会报错。这是因为在加载的时候其实是找到了 rt.jar 中的` java.lang.String ` ,然而发现这个里面并没有 ` main ` 方法。
132
132
133
133
## 三、运行时数据区
134
134
You can’t perform that action at this time.
0 commit comments