当程序创建对象、数组等引用类型实例时,系统在堆内存中分配一块内存去将对象保存起来,在栈中分配一个引用指向堆内存中的对象。当堆内存中的对象失去引用时,即没有引用变量指向堆内存中的对象时,存储该对象的内存就会变成垃圾,等待垃圾回收机制进行回收。
垃圾回收机制的特征:1.只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,磁盘文件IO,网络连接)。
2.当对象永久性地失去引用后,系统就会在合适的时候回收它所占的内存。
3.在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新被一个引用变量引用,从而导致垃圾回收机制取消回收。
对象在内存中的状态:可达状态:当对象有一个或一个以上的引用变量指向它的时候,该对象处于可达状态。
可恢复状态:当对象不再有任何引用变量引用它的时候,该对象处于可恢复状态。在此状态下系统的垃圾回收机制准备回收该对象所占的内存空间,在回收该对象之前,系统首先调用finalize()方法进行资源清理,如果此时finalize()方法重新让一个引用变量引用该对象,则该对象再次变为可达状态,否则,该对象将进入不可达状态。
不可达状态:当该对象没有任何引用变量引用它并且系统已经调用该对象的finalize()方法后没有使该对象变为可达状态时,系统将真正回收该对象所占的内存。
强制垃圾回收的的方法:1.System.gc();2.Runtime.getRuntime.gc();
System和Runtime类中的runFinalize()方法可以强制垃圾回收机制调用系统中可恢复对象的finalize方法。
本文深入探讨了Java垃圾回收机制的工作原理,包括如何识别可达、可恢复和不可达状态的对象,并阐述了强制垃圾回收的方法。通过解析对象在内存中的状态变化,为开发者提供了一种更高效管理内存资源的思路。

1379

被折叠的 条评论
为什么被折叠?



