Skip to content

Commit 64405ff

Browse files
authored
Merge pull request Snailclimb#2114 from JacketFu/main
Update jvm-garbage-collection.md
2 parents f364d6b + 784e7f3 commit 64405ff

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

docs/java/jvm/class-file-structure.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ ClassFile {
6060
u4 magic; //Class 文件的标志
6161
```
6262

63-
每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**
64-
65-
程序设计者很多时候都喜欢用一些特殊的数字表示固定的文件类型或者其它特殊的含义。
63+
每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**。Java规范规定魔数为固定值:0xCAFEBABE。如果读取的文件不是以这个魔数开头,Java虚拟机将拒绝加载它。
6664

6765
### Class 文件版本号(Minor&Major Version)
6866

docs/java/jvm/jvm-garbage-collection.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ public class GCTest {
107107

108108
大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。
109109

110-
大对象直接进入老年代主要是为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。
110+
大对象直接进入老年代的行为是由虚拟机动态决定的,它与具体使用的垃圾回收器和相关参数有关。大对象直接进入老年代是一种优化策略,旨在避免将大对象放入新生代,从而减少新生代的垃圾回收频率和成本。
111+
112+
* G1垃圾回收器会根据-XX:G1HeapRegionSize参数设置的堆区域大小和-XX:G1MixedGCLiveThresholdPercent参数设置的阈值,来决定哪些对象会直接进入老年代。
113+
* Parallel Scavenge垃圾回收器中,默认情况下,并没有一个固定的阈值(XX:ThresholdTolerance是动态调整的)来决定何时直接在老年代分配大对象。而是由虚拟机根据当前的堆内存情况和历史数据动态决定。
111114

112115
### 长期存活的对象将进入老年代
113116

@@ -229,6 +232,8 @@ public class ReferenceCountingGc {
229232
- 方法区中类静态属性引用的对象
230233
- 方法区中常量引用的对象
231234
- 所有被同步锁持有的对象
235+
- JNI(Java Native Interface)引用的对象
236+
232237
233238
**对象可以被回收,就代表一定会被回收吗?**
234239

0 commit comments

Comments
 (0)