垃圾回收具有以下特点:
1.只回收堆内存的对象,不回收其他物理资源(数据库连接等)
2.无法精准控制内存回收的时机,系统会在合适的时候进行内存回收。
3.在回收对象之前会调用对象的finalize()方法清理资源,这个方法有可能会让其他变量重新引用对象导致对象复活。
1.可达状态
有一个及以上的变量引用着对象。
2.可恢复状态
已经没有变量引用对象了,但是还没有被调用finalize()方法。系统在回收前会调用finalize()方法,如果在执行finalize()方法时,重新让一个变量引用了对象,那么对象会变成可达状态,否则会变成不可达状态。
3.不可达状态
执行finalize()方法后,对象还是被变量引用,那么对象就变成了不可达状态。
就是普通的变量对对象的引用,强引用的对象不会被系统回收。
当内存空间足够时,软引用的对象不会被系统回收。当内存空间不足时,软引用的对象可能被系统回收。通常用于内存敏感的程序中。
引用级别比软引用低,对于只有软引用的对象,不管内存是否足够, 都可能会被系统回收。
虚引用主要用于跟踪对象被垃圾回收的状态,不能单独使用,必须和引用队列联合使用。