【无标题】垃圾回收

垃圾回收

1 如何判断一个对象是否为垃圾

① 引用计数法
对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。当这个对象被引用时加一,引用失效时减一。任何引用计数器为0的对象实例可以被当作垃圾收集。
特点 :简单,无法解决循环引用。
① 可达性分析算法
可达性分析算法是以根对象集合(GCRoots就是一组必须活跃的引用)为起始点,按照从上倒下的搜索被根对象集合所连接的目标对象是否可达。被走过的路径叫做引用链,如果目标对象没有任何引用链相连,则是不可达的,就意味着该对象己经死亡,可以标记为垃圾对象

2 可达性算法中,哪些对象可作为GC Roots对象?

		虚拟栈中引用的对象,
		方法区静态成员应用的对象,
		方法区常量引用的对象,
		本地方法栈引用的对象

3 Java中都有那些引用类型

	① 强引用
			只要强引用存在,垃圾回收器将永远不会回收被引用的对象(Java中默认的引用方法为强引用)
	② 软引用
			在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收软引用对象后内存还不够,就会抛出内存溢出异常

	③ 弱引用
				无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收
	④ 虚引用
				虚引用的对象随时都会被回收

4、常见的垃圾回收算法都有哪些?(高频)

① 标记清除

执行过程:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。

优点:速度比较快

缺点:会产生内存碎片,碎片过多,仍会使得连续空间少

② 标记整理

执行过程:首先标记出所有需要回收的对象,在标记完成后统一进行整理,整理是指存活对象向一端移动来减少内存碎片,相对效率较低

优点:无内存碎片

缺点:效率较低

③ 复制算法

执行过程:开辟两份大小相等空间,一份空间始终空着,垃圾回收时,将存活对象拷贝进入空闲空间;

优点:无内存碎片

缺点:占用空间多

注意:如果有很多对象的存活率较高,这时我们采用复制算法,那么效率就比较低;

④ 分代回收

概述:根据对象存活周期的不同,将对象划分为几块,比如Java的堆内存,分为新生代和老年代,然后根据各个年代的特点采用最合适的算法;

新生代对象的存活的时间都比较短,因此使用的是【复制算法】;而老年代对象存活的时间比较长那么采用的就是【标记清除】或者【标记整理】;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值