垃圾收集算法

1、垃圾回收主要发生在java堆和方法区,一般java堆的对象被分为新生代和老年代,方法区的数据被称为永久代
2、永久代主要回收:废弃常量和无用的类,那么一个类被判定位无用的类要满足3个条件
1)该类的所有的实例都被回收
2)加载该类的classLoader也被回收
3)该类对应的java.lang.Class对象没有在任何地方被引用,无法通过反射访问该类的方法
在大量使用反射动态代理等场景都需要jvm具备类卸载的功能,以保证永久代不会溢出
垃圾收集算法
1、标记清除算法
1)该算法分为两个过程,标记和清除,标记的依据可以参加对象的存活判断和引用类型
2)这个算法的缺点是,效率不高,还有就是容易造成空间碎片,当分配较大对象时如果没有连续的内存,不得不触发另一次垃圾收集动作
2、复制算法
1)早期的复制算法是把内存空间等分成两块,先在第一块内存分配空间,当第一块快满了,把第一块存活的对象复制到第二块,然后把第一块内存清空,之后还有对象再进行就在第二块分配空间,当第二块内存也要满了,继续执行上面的操作
2)这种的算法不会带来内存碎片的问题,但是只能使用一般的分配空间,所以效率还是比较低的
3)后面进行改进,把内存内存分成一块Eden和两块Survivor区域,HotSpot虚拟机中Eden和Survivor大小比例是8:1,刚开始的时候我们只使用Eden和一块Survivor区域,当进行内存回收时,把存活对象复制到另一块Survivor区,如果超过Survivor区域大小,需要依赖其他内存,就是老年代,进行分配担保
4)复制算法在对象存活率较高时需要进行较多的复制,效率不高,所以复制算法更适合新生代
3、标记-整理算法
1)先标记对象,然后让所有存活对象往一端移动,然后清理掉边界以外的内存区域
4、分代收集算法
1)也就是将java堆分成新生代和老年代区域,新生代采用复制算法,老年代采用标记整理算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值