垃圾回收与内存分配策略

垃圾回收与内存分配策略

可达性分析算法

在这里插入图片描述
小结:GC Roots是一个对象,GC Roots从节点所搜索的路径为引用 链,当一个对象到GC Roots没有任何关联时,则判断对象是不可用的

引用类型

在java的垃圾收集算法中,都是基于“引用”算法的,jdk1.2之前,对象有两种类型,引用和未被引用。一个对象的reference中存储的数值代表另外一个内存的首地址。就称这块内存代表着一个引用,但是这种引用算法对于垃圾回收来说是不完善的,jdk1.2后提供了4种引用类型
在这里插入图片描述

小结:引用类型一次从高到低
强引用:只要强引用还存在,无论如何都不会被GC回收
软引用:会在内存溢出之前被二次回收
弱引用:会被GC回收
虚引用:无法通过虚引用得到对象的实例,唯一的作用是在对象回收的 时候向系统发出通知

GC回收算法

引用计数:为每个对象加个计数器,这个数为0,就会被回收
缺点:影响系统性能,无法处理循环引用

标记清除:对象被引用就会被标记,没有引用则会清除
缺点:产生空间碎片

标记整理【适用于老年代】:是对标记清除算法的优化,没有引用的对象不会被立即删除,而是把存活对象标记并放到一个内存中的角落,然后把其他空间删除掉,避免了空间碎片

复制算法【适用于年轻代】:将分配的内存分成两块,垃圾回收的时候,把其中一块正在使用的内存中的引用对象复制到另一块内存中,然后清除使用的内存中的所有对象,然后内存块交换

分代回收:内存中对象分为【新生代】【老年代】【永久带】
【新生代】:内存中刚被创建出来的对象,以及经历GC回收不超过15次的对象
【老年代】:内存中经历15次以上GC回收依旧存活的对象
【永久带】:存储方法,常量,
根据内存的类型来决定使用哪种算法·、
【新生代】:使用复制算法
【老年代】:使用标记压缩

分区:将堆分成一个一个的区间,每个区间单独处理,这样就不会进行全局处理,优化性能

内存对象分配思想

对象分配思想
·对象有限在eden分配
·大对象直接进入老年代
·长期存活的对象将进入老年代
·动态对象年龄判断
·空间分配担保

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值