Skip to content

Commit 93c7e5b

Browse files
committed
JMM 更新
1 parent 5ef47b4 commit 93c7e5b

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

MD/ClassLoad.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414

1515
双亲委派的好处 : 由于每个类加载都会经过最顶层的启动类加载器,比如 `java.lang.Object`这样在各个类加载器下都是同一个类(只有当两个类是由同一个类加载器加载的才有意义,这两个类才相等。)
1616

17-
如果没有双亲委派的话,由各个类加载器自行加载的话。当用户自己编写了一个 `java.lang.Object`类,那样系统中就会出现多个 `Object`,这样 Java 程序中最基本的行为都无法保证,程序会变的非常混乱。
17+
如果没有双亲委派的,由各个类加载器自行加载的话。当用户自己编写了一个 `java.lang.Object`类,那样系统中就会出现多个 `Object`,这样 Java 程序中最基本的行为都无法保证,程序会变的非常混乱。

MD/MemoryAllocation.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,19 @@ Java 堆是整个虚拟机所管理的最大内存区域,所有的对象创建
2828
## 方法区
2929

3030
方法区主要用于存放已经被虚拟机加载的类信息,如`常量,静态变量`
31-
这块区域也被称为`老年代`
31+
这块区域也被称为`老年代`
32+
33+
### 运行时常量池
34+
35+
运行时常量池是方法区的一部分,其中存放了一些符号引用。当 new 一个对象时,会检查这个区域是否有这个符号的引用。
36+
37+
38+
## 创建对象
39+
`JVM` 收到一个 `new` 指令时,会检查指令中的参数在常量池是否有这个符号的引用,还会检查该类是否已经被[加载](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ClassLoad.md)过了,如果没有的话则要进行一次类加载。
40+
41+
接着就是分配内存了,通常有两种方式:
42+
43+
- 指针碰撞
44+
- 空闲列表
45+
46+
指针碰撞

0 commit comments

Comments
 (0)