GC回收过程与算法?

哪些可以回收? 什么时候可以回收? 怎样回收?
哪些对象可以回收的算法:
引用计算法:对象引用一次就加+1,0是可以回收的,但会存在循环引用问题。
根搜索算法:又叫可达性分析,以根作为起点没有路径则为是失效的。
怎样回收?
标记清除算法:标记后进行清除,会出现内存碎片化缺点。
复制算法:使用同样的两块内存,当内存满时活对象复制到另一个内存中。内存用一半而已。
标记整理算法:将存活对象移向内存的一端。然后清除端边界外的对象。
分区收集算法:将堆空间划分为连续的不同小区间(独立),减少一次 GC 所产生的停顿。
分代收集算法:目前大部分 JVM 所采用的方法。
分为新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。
在这里插入图片描述
新生代会频繁触发 MinorGC 进行垃圾回收((复制->清空->互换)
老年代主要存放生命周期长的内存对象,当新生代空间不够用时才触发复制到老年代。
永久代(后来改为方法区)指内存的永久保存区域,主要存放 Class 和 Meta(元数据)的信息,Class 在被加载的时候被放入永久区域,满了会出现OOM问题。

eden新对象的出生地,当eden内存不够才会触发GC,eden与form的对象复制到to。年龄够就去老年代。
from放上一次存活的对象。
to与from交换。

发布了17 篇原创文章 · 获赞 0 · 访问量 1033

猜你喜欢

转载自blog.csdn.net/weixin_41980692/article/details/105693697