Skip to content

Commit ad786cd

Browse files
committed
Update JVM垃圾回收.md
1 parent 4391099 commit ad786cd

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

docs/java/jvm/JVM垃圾回收.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,16 @@ public class GCTest {
313313
314314
整堆收集 (Full GC):收集整个 Java 堆和方法区。
315315
316+
### 1.6 空间分配担保
317+
318+
空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。
319+
320+
《深入理解Java虚拟机》第三章对于空间分配担保的描述如下:
321+
322+
> JDK 6 Update 24 之前,在发生 Minor GC 之前,虚拟机必须先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件成立,那这一次 Minor GC 可以确保是安全的。如果不成立,则虚拟机会先查看 `-XX:HandlePromotionFailure` 参数的设置值是否允许担保失败(Handle Promotion Failure);如果允许,那会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试进行一次 Minor GC,尽管这次 Minor GC 是有风险的;如果小于,或者 `-XX: HandlePromotionFailure` 设置不允许冒险,那这时就要改为进行一次 Full GC。
323+
>
324+
> JDK 6 Update 24之后的规则变为只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小,就会进行 Minor GC,否则将进行 Full GC。
325+
316326
## 2 对象已经死亡?
317327
318328
堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)。

0 commit comments

Comments
 (0)