什么是垃圾回收
当程序创建引用类型数据时,JVM会在堆内存中为分配一块内存区。当这份数据不在被任何变量引用时,他就会变成垃圾,对应的内存区就等待垃圾回收器额回收。
- 垃圾回收器负责回收堆内存的空间
- 程序无法精确的控制垃圾回收的时机
- 当数据永久的失去引用后,垃圾回收器会在合适的时候回收他的内存区
finalize方法
定义在java.lang.Object类中
protected void finalize() throws Throwable()
- 用于清理对象占用的资源
- 垃圾回收器在回收某对象内存之前,先调用他的finalize方法
- 针对某一个对象,垃圾回收器最多只会调用它的finalize方法一次
- 不要主动调用finalize方法
- finalize方法何时调用,是否调用是不确定的
内存状态
可达状态
若对象至少被一个变量引用,则该对象处于可达状态
可恢复状态
若对象不在被任何变量引用,他就进入可恢复状态
此时垃圾回收器准备回收他的内存,并在回收前调用他的finalize方法
不可达状态
若在调用finalize方法后,对象依然未被引用,他就进入了不可达状态
只有对象进入了不可达状态,垃圾回收器才会回收该对象占据的内存空间
强制垃圾回收
- System.gc()
- Runtime.getRuntime().gc()
通知垃圾回收器进行垃圾回收,但是是否回收以及回收时机依然由垃圾回收器决定