1.如何判断一个对象可以被回收
引用计数法:
- 一个对象被其他变量引用,则计数+1,每被多引用一次,计数就+1,如果某个变量不再引用这个对象,则计数-1,如果计数为0,则可以回收。
- 存在弊端:循环引用。即如下图,A引用B,B引用A,但没有其他变量引用,A和B的引用计数都为1,不能被回收。
可达性分析算法:
- 首先要确定一系列根对象GC Root(肯定不能被当成垃圾的对象)。
- 在垃圾回收之前,对堆内存中的所有对象进行扫描,观察每个对象是否被根对象直接或间接的引用,如果是,则不能被回收,反之,则可以作为垃圾回收。
- 哪些类是GC Root类?
- 1.Object和String类等核心类
- 2.操作系统引用的JAVA对象
- 3.活动线程中使用的对象
- 4.正在加锁的对象