diff --git a/docs/java/jvm/class-file-structure.md b/docs/java/jvm/class-file-structure.md index f9802868..aac8a9cf 100644 --- a/docs/java/jvm/class-file-structure.md +++ b/docs/java/jvm/class-file-structure.md @@ -60,9 +60,7 @@ ClassFile { u4 magic; //Class 文件的标志 ``` -每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**。 - -程序设计者很多时候都喜欢用一些特殊的数字表示固定的文件类型或者其它特殊的含义。 +每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是**确定这个文件是否为一个能被虚拟机接收的 Class 文件**。Java规范规定魔数为固定值:0xCAFEBABE。如果读取的文件不是以这个魔数开头,Java虚拟机将拒绝加载它。 ### Class 文件版本号(Minor&Major Version) diff --git a/docs/java/jvm/jvm-garbage-collection.md b/docs/java/jvm/jvm-garbage-collection.md index 84d784fd..f57e8c43 100644 --- a/docs/java/jvm/jvm-garbage-collection.md +++ b/docs/java/jvm/jvm-garbage-collection.md @@ -107,7 +107,10 @@ public class GCTest { 大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。 -大对象直接进入老年代主要是为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。 +大对象直接进入老年代的行为是由虚拟机动态决定的,它与具体使用的垃圾回收器和相关参数有关。大对象直接进入老年代是一种优化策略,旨在避免将大对象放入新生代,从而减少新生代的垃圾回收频率和成本。 + +* G1垃圾回收器会根据-XX:G1HeapRegionSize参数设置的堆区域大小和-XX:G1MixedGCLiveThresholdPercent参数设置的阈值,来决定哪些对象会直接进入老年代。 +* Parallel Scavenge垃圾回收器中,默认情况下,并没有一个固定的阈值(XX:ThresholdTolerance是动态调整的)来决定何时直接在老年代分配大对象。而是由虚拟机根据当前的堆内存情况和历史数据动态决定。 ### 长期存活的对象将进入老年代 @@ -229,6 +232,8 @@ public class ReferenceCountingGc { - 方法区中类静态属性引用的对象 - 方法区中常量引用的对象 - 所有被同步锁持有的对象 +- JNI(Java Native Interface)引用的对象 + **对象可以被回收,就代表一定会被回收吗?**