1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #2114 from JacketFu/main

Update jvm-garbage-collection.md
This commit is contained in:
Guide 2023-08-04 18:26:23 +08:00 committed by GitHub
commit 64405ffc3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 4 deletions

View File

@ -60,9 +60,7 @@ ClassFile {
u4 magic; //Class 文件的标志 u4 magic; //Class 文件的标志
``` ```
每个 Class 文件的头 4 个字节称为魔数Magic Number,它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**。 每个 Class 文件的头 4 个字节称为魔数Magic Number,它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**。Java规范规定魔数为固定值0xCAFEBABE。如果读取的文件不是以这个魔数开头Java虚拟机将拒绝加载它。
程序设计者很多时候都喜欢用一些特殊的数字表示固定的文件类型或者其它特殊的含义。
### Class 文件版本号Minor&Major Version ### Class 文件版本号Minor&Major Version

View File

@ -107,7 +107,10 @@ public class GCTest {
大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。 大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。
大对象直接进入老年代主要是为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。 大对象直接进入老年代的行为是由虚拟机动态决定的,它与具体使用的垃圾回收器和相关参数有关。大对象直接进入老年代是一种优化策略,旨在避免将大对象放入新生代,从而减少新生代的垃圾回收频率和成本。
* G1垃圾回收器会根据-XX:G1HeapRegionSize参数设置的堆区域大小和-XX:G1MixedGCLiveThresholdPercent参数设置的阈值来决定哪些对象会直接进入老年代。
* Parallel Scavenge垃圾回收器中默认情况下并没有一个固定的阈值(XX:ThresholdTolerance是动态调整的)来决定何时直接在老年代分配大对象。而是由虚拟机根据当前的堆内存情况和历史数据动态决定。
### 长期存活的对象将进入老年代 ### 长期存活的对象将进入老年代
@ -229,6 +232,8 @@ public class ReferenceCountingGc {
- 方法区中类静态属性引用的对象 - 方法区中类静态属性引用的对象
- 方法区中常量引用的对象 - 方法区中常量引用的对象
- 所有被同步锁持有的对象 - 所有被同步锁持有的对象
- JNIJava Native Interface引用的对象
**对象可以被回收,就代表一定会被回收吗?** **对象可以被回收,就代表一定会被回收吗?**