垃圾回收GC作用简析

本文深入探讨Java堆作为运行时数据区的角色,解析GC算法如引用计数法的工作原理,以及系统如何平衡空间与时间,实现最优内存管理。同时,文章详细介绍了system.gc()方法的作用,以及finalize()方法在对象回收中的善后处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java堆:运行时数据区,用于存储所有运行期的对象数据,使用了动态存储管理技术

GC算法:

引用计数法:计算对象被引用调用的算法,当一个对象没有被任何一个引用指向它时候,这个对象就会被放入可以回收的列表;

即这个对象被应用抛弃,这只代表对象是具有回收的资格,并不马上回收;同时GC会实时检测堆,查找出计数为0的对象

 

其他算法:因为jvm回收内存是有较大的系统开销,如果每个被抛弃的对象都回收会导致系统的效率低下,所以对于我们来说,需要

其他的算法来实现空间和时间的平衡,达到最优的处理方案

所以GC回收需要对象可以回收和系统需要回收

 

干预回收:

system,gc() 这个方法只是给其他计算系统是否需要回收的算法进行加权,并不能马上对对象回收

只是加权使系统回收时间提前;垃圾回收为应用服务,并不能被某个进程进行调用,他是一个共有的的处理方法。

 

finalize()方法:

作用:用于对象回收的善后处理,比如将对象打开的文件进行关闭以保证其他的对象可以对这个文件进行调用;因为

如果对象打开是私有打开则其他对象不能用,如果是共享打开则不能读取到这个对象对这个文件的修改;

 

finalize()类似于c+的析构方法,但析构方法是可以具有固定的调用的,当对象离开作用域时候,就会对其调用

但finalize()并没有,这个是对应的是在对象销毁后调用的,所以其调用的时间是通过GC算法控制,没有固定的

调用

 

注:jvm在对象回收调用finalize时候会忽略其中抛出的异常,在其他情况调用时候更普通方法的异常一样

GC只是一个低优先级的后台线程,而且跟踪可达和不可达的对象

且finalize覆盖时候默认调用了父类方法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值