Java学习笔记之垃圾收集机制和原理

本文深入探讨了Java垃圾回收机制的工作原理,包括如何识别可达、可恢复和不可达状态的对象,并阐述了强制垃圾回收的方法。通过解析对象在内存中的状态变化,为开发者提供了一种更高效管理内存资源的思路。

当程序创建对象、数组等引用类型实例时,系统在堆内存中分配一块内存去将对象保存起来,在栈中分配一个引用指向堆内存中的对象。当堆内存中的对象失去引用时,即没有引用变量指向堆内存中的对象时,存储该对象的内存就会变成垃圾,等待垃圾回收机制进行回收。


垃圾回收机制的特征:1.只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,磁盘文件IO,网络连接)。

2.当对象永久性地失去引用后,系统就会在合适的时候回收它所占的内存。

3.在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新被一个引用变量引用,从而导致垃圾回收机制取消回收。


对象在内存中的状态:可达状态:当对象有一个或一个以上的引用变量指向它的时候,该对象处于可达状态。

可恢复状态:当对象不再有任何引用变量引用它的时候,该对象处于可恢复状态。在此状态下系统的垃圾回收机制准备回收该对象所占的内存空间,在回收该对象之前,系统首先调用finalize()方法进行资源清理,如果此时finalize()方法重新让一个引用变量引用该对象,则该对象再次变为可达状态,否则,该对象将进入不可达状态。

不可达状态:当该对象没有任何引用变量引用它并且系统已经调用该对象的finalize()方法后没有使该对象变为可达状态时,系统将真正回收该对象所占的内存。


强制垃圾回收的的方法:1.System.gc();2.Runtime.getRuntime.gc();

System和Runtime类中的runFinalize()方法可以强制垃圾回收机制调用系统中可恢复对象的finalize方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值