垃圾回收有哪些特点?

垃圾回收具有以下特点:

1.只回收堆内存的对象,不回收其他物理资源(数据库连接等)

2.无法精准控制内存回收的时机,系统会在合适的时候进行内存回收。

3.在回收对象之前会调用对象的finalize()方法清理资源,这个方法有可能会让其他变量重新引用对象导致对象复活。

在垃圾回收机制中,对象在内存中的状态有哪几种?

1.可达状态

有一个及以上的变量引用着对象。

2.可恢复状态

已经没有变量引用对象了,但是还没有被调用finalize()方法。系统在回收前会调用finalize()方法,如果在执行finalize()方法时,重新让一个变量引用了对象,那么对象会变成可达状态,否则会变成不可达状态。

3.不可达状态

执行finalize()方法后,对象还是被变量引用,那么对象就变成了不可达状态。

对象的强引用,软引用,弱引用和虚引用的区别是什么?

强引用

就是普通的变量对对象的引用,强引用的对象不会被系统回收。

软引用

当内存空间足够时,软引用的对象不会被系统回收。当内存空间不足时,软引用的对象可能被系统回收。通常用于内存敏感的程序中。

弱引用

引用级别比软引用低,对于只有软引用的对象,不管内存是否足够, 都可能会被系统回收。

虚引用

虚引用主要用于跟踪对象被垃圾回收的状态,不能单独使用,必须和引用队列联合使用。