0
点赞
收藏
分享

微信扫一扫

JVM垃圾回收理论与算法

祈澈菇凉 2022-04-07 阅读 39
java

分代收集理论:

现有的大部分垃圾回收都是分代的

弱分代假说:大多数对象都是朝生夕死的

强分代假说:熬过越多垃圾回收过程的对象就越难消亡

跨代引用假说:跨代引用相较于同代引用只占极少数

垃圾收集定义:

新生代收集(Minor GC/Young GC):指目标只是新生代的收集

老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。只有CMS收集器会有单独收集老年代的行为。

混合收集(Mixed GC):指目标是收集整个新生代,以及部分老年代。目前只有G1收集器有这种行为

整堆收集(Full GC):收集整个Java堆和方法区

1.垃圾回收算法

出现时间排序:标记清除->标记复制->标记-整理

优点缺点

标记-

清除

基础算法

1.执行效率低(大量标记,清除,效率随着对象的增加下降,在java中,大量的对象都是会被回收的)

2.内存空间碎片化(导致没有大的连续空间给大对象)

标记-复制解决执行效率低的问题(大量对象都需要回收)

由于要留些空闲空间,会导致空间的浪费

“Apple式回收”即Eden:S0:S1=8:1:1

标记-整理解决内存空间碎片化的问题吞吐量大,适合大量对象存活的场景会STW,产生停顿,用户感知时延会提高

第一步:标记算法

引用计数法:对象中定义一个引用计数器,有引用,计数器加一;引用失效,计数器减一

缺点:两个对象相互引用的时候,不能回收

可达性分析:通过一系列命名为“GC Roots”的对象作为起点,根据引用关系向下搜索,这个搜索过程走过的路径称之为“引用链”。如果某个对象到GC Roots间没有任何引用链,图论即不可达的情况下,则证明对象不可用

新生代算法:标记-复制,

原因:新生代的对象在可达性分析过后,回收的对象是大部分,可以把存活的对象,复制到survivor 1区,然后清除掉Eden区的失效对象。

老年代算法:标记-清除(CMS),标记整理(Serial Old,Parallel Old,CMS),其中CMS是标记清除,到后面浮动垃圾多了,采用标记整理,进行垃圾回收

举报

相关推荐

0 条评论