GC

对象被断定为垃圾的标准
没有被其余对象引用算法

断定对象是否为垃圾的算法
1.引用计数算法优化

clipboard.png

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

2.可达性分析算法3d

clipboard.png

可做为GCRoots的对象对象

clipboard.png

垃圾回收算法blog

第一种垃圾回收算法:标记-清除算法
clipboard.png排序

缺点:
clipboard.pngip

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

clipboard.png
好处和应用场景
适用于对象存活率比较低的状况,由于从对象面复制到空闲面开销比较小
clipboard.pngit

第三种:标记-整理算法

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

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

clipboard.png
jdk8及其之后的版本堆内存分为年轻代和老年代
年轻代存活率低,采用复制算法,老年代存活 率高采用标记-整理算法
clipboard.png

分代收集的算法分为两种

clipboard.png

clipboard.png

年轻代垃圾回收的过程演示
年轻代有大量的对象的建立,因此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
clipboard.png
第二次MinorGC
clipboard.png

clipboard.png

第三次MinorGC
clipboard.png

clipboard.png

对象如何晋升到老年代

能够设置大对象的值,一旦超过这个值就进入老年代
clipboard.png

经常使用的调优参数

clipboard.png

老年代

clipboard.png

clipboard.png

触发Full GC的条件

clipboard.png

几个名词的解释:
Stop-the-World

clipboard.png

Safepoint

clipboard.png

JVM有两种运行模式:1.Server模式2.Client模式
Client模式启动速度比Server模式要快,而Server模式对JVM进行了优化,启动慢,可是当Server运行稳定以后,速度是快于Client的

垃圾收集器之间的联系

clipboard.png

年轻代垃圾收集器
1.Serial收集器 (Client模式,注重用户的停顿时间)
clipboard.png
2.ParNew收集器 (Server模式,注重用户的停顿时间)

clipboard.png

3.Parallel Scavenge收集器(Server模式,且多核CPU才有优点,注重吞吐量)
用户停顿时间体现了用户的实时性是否足够好,高吞吐量能够高效利用cup

clipboard.png

clipboard.png

老年代垃圾收集器
1.Serial Old收集器

clipboard.png

2.Parallel Old垃圾收集器(以吞吐量优先)

clipboard.png

3.CMS垃圾收集器
红色标记才stop-the-world
clipboard.png

clipboard.png
缺点:CMS采用的是标记-清除算法,会产生大量的空间碎片,下一次分配内存的时候,若是内存过大,就分配不了,就只有再一次GC操做

既用于年轻代也用于老年代的收集器 G1收集器

相关文章
相关标签/搜索