转载

GC

对象被判定为垃圾的标准

没有被其他对象引用

判定对象是否为垃圾的算法

1.引用计数算法

GC

优缺点:

解释:循环引用就是父类调用子类,子类再调用父类,这样循环调用,计数永远不可能为0,,最后导致内存泄露,程序变慢,严重还可能系统崩溃。

GC

2.可达性分析算法

GC

可作为GCRoots的对象

GC

垃圾回收算法

第一种垃圾回收算法:标记-清除算法

GC

缺点:

GC

第二种垃圾回收算法:复制算法

GC

好处和应用场景

适用于对象存活率比较低的情况,因为从对象面复制到空闲面开销比较小

GC

第三种:标记-整理算法

GC

标记整理算法适用于对象存活率比较高的情况下,和复制算法相比,标记整理算法是排序存活对象,开销要比复制算法中的复制对象到空闲面要低得多

GC

第四种:分代垃圾回收算法

GC

jdk8及其以后的版本堆内存分为年轻代和老年代

年轻代存活率低,采用复制算法,老年代存活 率高采用标记-整理算法

GC

分代收集的算法分为两种

GC

GC

年轻代垃圾回收的过程演示

年轻代有大量的对象的创建,所以MinorGC也比较频繁。

假如说Eden能装4个对象,from survivor和to survivor能装3个对象

第一次Eden满了进行一次MinorGC,有一个对象生存下来,然后放在from survivor中,并且年龄加1。

第二次Eden满了,然后有两个对象生存下来,然后把from survivor和Eden中存活的对象都放进to survivor中,并且年龄加1。

第三次Eden满了,然后有一个对象生存下来,并且to survivor中有一个对象需要被清理,然后把to survivor和Eden中存活的对象都放进from survivor中,年龄加1。

所以from survivor和to survivor是相对的

survivor的对象达到15岁则进入老年代,还有如果一个对象过大,在Eden和survivor中没有这么大的连续空间来存放这个对象时,该对象可以直接进入老年代

第一次MinorGC

GC

第二次MinorGC

GC

GC

第三次MinorGC

GC

GC

对象如何晋升到老年代

可以设置大对象的值,一旦超过这个值就进入老年代

GC

常用的调优参数

GC

老年代

GC

GC

触发Full GC的条件

GC

原文  https://segmentfault.com/a/1190000020326535
正文到此结束
Loading...